تنسيق صورة أيقونة أبل
يُعدّ تنسيق صور أيقونات Apple (.icns) تنسيقًا للأيقونات يُستخدم في نظام macOS من شركة Apple Inc. يدعم هذا التنسيق أيقونات بأحجام 16×16، 32×32، 48×48، 128×128، 256×256، و512×512 نقطة، بمقياس 1x و2x، مع قنوات ألفا أحادية وثمانية بت ، وحالات متعددة للصورة (مثال: المجلدات المفتوحة والمغلقة). يمكن لنظام التشغيل تغيير حجم الأيقونات ذات الحجم الثابت وعرضها بأي حجم وسيط.
ابتداءً من نظام macOS 11 ، أصبحت كتالوجات الأصول هي تنسيق الملفات المفضل لأيقونات macOS المخصصة. [ 1 ]
بنية الملفات
يتكون تنسيق الملف من رأسية بحجم 8 بايت، متبوعة بأي عدد من الرموز.
رأس الصفحة
| إزاحة | مقاس | غاية |
|---|---|---|
| 0 | 4 | القيمة السحرية الحرفية، يجب أن تكون "icns" (0x69، 0x63، 0x6e، 0x73) |
| 4 | 4 | طول الملف بالبايت، بدءًا من البت الأكثر أهمية |
بيانات الأيقونة
| إزاحة | مقاس | غاية |
|---|---|---|
| 0 | 4 | نوع الأيقونة، انظر نوع نظام التشغيل أدناه. |
| 4 | 4 | طول البيانات بالبايت (بما في ذلك النوع والطول)، مع تحديد البت الأكثر أهمية أولاً. |
| 8 | عامل | بيانات الأيقونة |
أنواع الأيقونات
| نوع نظام التشغيل | الحجم (بايت) | الحجم (بالبكسل) | إصدارات نظام التشغيل المدعومة | وصف |
|---|---|---|---|---|
| رمز | 128 | 32×32 | 1.0 | أيقونة أحادية اللون (1 بت) |
| ICN# | 256 | 32×32 | 6.0 | أيقونة أحادية اللون (1 بت) مع قناع أحادي اللون (1 بت). |
| icm# | 48 | 16×12 | 6.0 | أيقونة أحادية اللون (1 بت) مع قناع أحادي اللون (1 بت). |
| icm4 | 96 | 16×12 | 7.0 | أيقونة 4 بت |
| icm8 | 192 | 16×12 | 7.0 | أيقونة 8 بت |
| ics# | 64 | 16×16 | 6.0 | أيقونة أحادية اللون (1 بت) مع قناع أحادي اللون (1 بت). |
| ics4 | 128 | 16×16 | 7.0 | أيقونة 4 بت |
| ics8 | 256 | 16×16 | 7.0 | أيقونة 8 بت |
| is32 | يختلف 1 (768) | 16×16 | 8.5 | أيقونة RGB ذات 24 بت |
| s8mk | 256 | 16×16 | 8.5 | قناع 8 بت |
| icl4 | 512 | 32×32 | 7.0 | أيقونة 4 بت |
| icl8 | 1024 | 32×32 | 7.0 | أيقونة 8 بت |
| il32 | يختلف 1 (3072) | 32×32 | 8.5 | أيقونة RGB ذات 24 بت |
| l8mk | 1024 | 32×32 | 8.5 | قناع 8 بت |
| ich# | 576 | 48×48 | 8.5 | أيقونة أحادية اللون (1 بت) مع قناع أحادي اللون (1 بت). |
| ich4 | 1152 | 48×48 | 8.5 | أيقونة 4 بت |
| ich8 | 2304 | 48×48 | 8.5 | أيقونة 8 بت |
| ih32 | يختلف 1 (6912) | 48×48 | 8.5 | أيقونة RGB ذات 24 بت |
| h8mk | 2304 | 48×48 | 8.5 | قناع 8 بت |
| it32 | يختلف 1 (49152 + 4) 2 | 128×128 | 10.0 | أيقونة RGB ذات 24 بت |
| t8mk | 16384 | 128×128 | 10.0 | قناع 8 بت |
| icp4 | يختلف | 16x16 | 10.7 | تنسيق JPEG 2000 † أو PNG † أو أيقونة RGB ذات 24 بت [ 2 ] |
| icp5 | يختلف | 32x32 | 10.7 | تنسيق JPEG 2000 † أو PNG † أو أيقونة RGB ذات 24 بت [ 2 ] |
| icp6 | يختلف | 48x48 | 10.7 | صيغة JPEG 2000 † أو PNG † |
| ic07 | يختلف | 128x128 | 10.7 | صيغة JPEG 2000 أو PNG |
| ic08 | يختلف | 256x256 | 10.5 | صيغة JPEG 2000 أو PNG |
| ic09 | يختلف | 512x512 | 10.5 | صيغة JPEG 2000 أو PNG |
| ic10 | يختلف | 1024x1024 | 10.7 | صيغة JPEG 2000 أو PNG (512x512@2x "retina" في 10.8) |
| ic11 | يختلف | 32x32 | 10.8 | صيغة JPEG 2000 أو PNG (16x16@2x "retina") |
| ic12 | يختلف | 64x64 | 10.8 | صيغة JPEG 2000 أو PNG (32x32@2x "retina") |
| ic13 | يختلف | 256x256 | 10.8 | صيغة JPEG 2000 أو PNG (128x128@2x "retina") |
| ic14 | يختلف | 512x512 | 10.8 | صيغة JPEG 2000 أو PNG (256x256@2x "retina") |
| ic04 | يختلف 1 (1024) | 16x16 | تنسيق ARGB أو JPEG 2000 † أو PNG † | |
| ic05 | يختلف 1 (4096) | 32x32 | تنسيق ARGB أو JPEG 2000 † أو PNG † (16x16@2x "retina") | |
| icsb | يختلف 1 (1296) | 18x18 | تنسيق ARGB أو JPEG 2000 † أو PNG † | |
| icsB | يختلف | 36x36 | صيغة JPEG 2000 أو PNG (18x18@2x "retina") | |
| sb24 | يختلف | 24x24 | صيغة JPEG 2000 أو PNG | |
| SB24 | يختلف | 48x48 | صيغة JPEG 2000 أو PNG (24x24@2x "retina") |
- 1. القيمة الموجودة داخل الأقواس هي الطول غير المضغوط لأيقونات ARGB و 24 بت RGB.
- ٢. تبدأ بيانات it32 دائمًا برأسية مكونة من أربعة أصفار (تم اختبار جميع ملفات icns في macOS 10.15.7 و macOS 11). الاستخدام غير معروف، ويمكن أن تكون الأصفار الأربعة أي قيمة ويتم تجاهلها تلقائيًا.
- †. هذه التنسيقات مدعومة في ملفات icns المستقلة ولكنها لا تُعرض بشكل صحيح إذا تم استخدامها كأيقونة تطبيق داخل حزمة .app .
تنسيق بيانات الصورة
- يمكن للأيقونات أحادية اللون المزودة بقناع ألفا أن تعرض ثلاثة ألوان: الأبيض والأسود والشفاف.
- تستخدم الأيقونات ذات 4 بت و 8 بت لوحة ألوان ثابتة تحتوي على 16 لونًا و 256 لونًا على التوالي.
- يتكون تنسيق RGB ذو 24 بت من القنوات الثلاث المضغوطة والمتراصة بإحكام (انظر قسم الضغط ). يجب أن يبدأ رمز it32 برأسية من أربعة بايتات، انظر الحاشية أعلاه.
- يتكون تنسيق ARGB من قيم ASCII لـ 'ARGB' والقنوات الأربعة المضغوطة بإحكام (انظر الضغط ).
التوافق
- تقبل حقول ARGB أيضًا الملفات بتنسيق PNG - ولكن ليس العكس، فلا يمكنك وضع صور ARGB في أي من الحقول التي تدعم PNG فقط (تم اختبارها على macOS 11).
- لا تدعم macOS 11 والإصدارات الأحدث صور ARGB إلا، بينما لا يدعمها macOS 10.15.7. مع ذلك، يمكن عرض مفاتيح ARGB على macOS 10.15 إذا تم تعيين صورة JPEG 2000 أو PNG (راجع الحاشية أعلاه حول استخدامها في حزم التطبيقات).
- تسمح أيقونات RGB ذات 24 بت ( is32 ، il32 ، ih32 ، it32 ) أيضًا بالصور بتنسيق JPEG 2000 وPNG (تم اختبارها على macOS 10.15.7 وmacOS 11).
- يبدو أن دعم أنواع الصور الأحدث قد أُضيف لاحقًا مقارنةً بحقل المفتاح (انظر النقطتين السابقتين). لذا، قد لا يكون إصدار نظام التشغيل المدعوم دقيقًا أو قد يكون مُعدَّلًا بناءً على تنسيق الملف.
أنواع أخرى
| نوع نظام التشغيل | وصف |
|---|---|
'TOC ' | "جدول المحتويات" قائمة بجميع أنواع الصور في الملف وأحجامها (تمت إضافتها في نظام التشغيل Mac OS X 10.7 ). يُكتب جدول المحتويات على شكل مُعرّف (4 بايتات) وحجم (4 بايتات). كل سجل لاحق (8 بايتات لكل سجل) يُطابق تنسيقات الأيقونات الموجودة في الملف. لا تُضمّن البيانات في هذه المرحلة. |
'icnV' | عدد عشري كبير النهاية مكون من 4 بايتات - يساوي رقم إصدار حزمة Icon Composer.app الذي أنشأ الأيقونة |
'name' | الاستخدام غير معروف (جميع الملفات التي تم اختبارها تستخدم إما "icon" [ 3 ] أو "template" [ 4 ] ). |
'info' | معلومات ملف plist الثنائي . الاستخدام غير معروف (يبدو أن حقل الاسم فقط هو المستخدم). |
'sbtp' | ملف icns "قالب" متداخل. الاستخدام غير معروف. |
'slct' | ملف icns "محدد" متداخل. الاستخدام غير معروف. |
FD D9 2F A8 | ملف icns "داكن" متداخل. يسمح بالتبديل التلقائي للأيقونات في الوضع الداكن . (تمت إضافته في macOS 10.14 ). ملاحظة: محتويات هذا السجل عبارة عن ملف .icns كامل بتنسيقات متعددة. إذا تم كتابة بايتات السجل على القرص، فسيظل رأس ملف icns وحجم الملف مطلوبين لعرض أيقونة الوضع الداكن كاملةً. |
- جدول المحتويات عبارة عن قائمة بجميع الأنواع المضمنة (اسم النوع 4 بايت + طول 4 بايت).
- لا تحتوي بيانات جميع ملفات icns المتداخلة على ترويسة ملف icns. لذا، إذا كنت ترغب في حفظ البيانات في ملف، عليك إضافة ترويسة icns في البداية .
أنواع العناصر غير PNG / JPEG2000
تتطلب أنواع العناصر التي تتعامل مع تنسيقات صور ARGB (32 بت) أو RGB (24 بت) أنواعًا مختلفة من الرؤوس قبل البيانات الثنائية. يُعد هذا الرأس جزءًا من بيانات الصورة، وهو ليس قيمة نوع عنصر أيقونة big endian ذات 4 بايت (مثل ic04 أو ic05). [ 5 ]
عناصر ARGB
يجب أن تسبق بيانات الصور ثنائية التنسيق (ARGB) رأسية مكونة من أربعة بايتات. بعد ذلك، بدلاً من تخزين كل بكسل مع قنواته الأربع معًا (مثل ARGBARGBARGB)، تُخزن الصورة المكونة من ثلاثة بكسلات في قنوات بيانات منفصلة (مثل AAARRRGGGBBB). إضافةً إلى ذلك، يجب ترميز كل قناة من قنوات بيانات البكسل كما هو موضح أدناه.
عناصر RGB
تحتوي صور RGB على الجزء الثنائي من بيانات الصورة مسبوقًا بأربعة أحرف من الصفر فقط عندما يكون نوع العنصر 'it32'. في جميع الحالات الأخرى، لا حاجة إلى رأس. يتم فصل بيانات القنوات كما هو الحال مع بيانات ARGB الثنائية (على سبيل المثال RRRGGGBBB بدلاً من RGBRGBRGB). يجب أيضًا ترميز كل قناة كما هو مذكور أدناه.
عناصر القناع
لا تُشفّر عناصر القناع بنفس طريقة تشفير بيانات قنوات الألوان في صور ARGB وRGB. البيانات هي نفسها بيانات صورة ARGB باستثناء توفير بيانات قناة ألفا فقط. لذا، بالنسبة لصورة تحتوي على بكسلين، ARGBARGB، تكون بيانات القناع هي AA.
ضغط
| قيمة الرصاص | بايتات الذيل | النتيجة غير مضغوطة |
|---|---|---|
| 0...127 | 1...128 | 1...128بايت |
| 128...255 | 1بايت | 3...130نسخ |
مع مرور الوقت، تم تحسين التنسيق وأصبح يدعم ضغط بعض أجزاء بيانات البكسل. يتم ضغط بيانات بكسل RGB ذات 24 بت ( is32 ، il32 ، ih32 ، it32 ، icp4 ، icp5 ) وARGB ( ic04 ، ic05 ، icsb ) (لكل قناة) بتنسيق مشابه لـ PackBits . [ 6 ] تشير بعض المصادر إلى أن نظام التشغيل يدعم كلاً من أجزاء البيانات المضغوطة وغير المضغوطة. مع ذلك، لن يتم عرض ملفات icns التي تم إنشاؤها يدويًا باستخدام صور RGB أو ARGB غير المضغوطة ذات 24 بت بشكل صحيح - على الأقل في إصدارات macOS الأحدث (تم الاختبار على macOS 11).
إليكم مستودع GitHub يحتوي على بعض أكواد Swift التي يبدو أنها تجتاز اختبار كل من التشفير وفك التشفير كما هو موضح هنا: ByteRunLengthCoder
تقوم الشفرة الزائفة التالية بفك ضغط البيانات:
مع وجود بيانات مضغوطة : اقرأ بايتًا واحدًا كرقم غير مُوقّع N إذا كان N < 0x80: أخرج البايتات التالية (N + 1) آخر : أخرج البايت التالي (N - 0x80 + 3) مرات
مثال: 02 01 02 02 80 03 81 04 82 05يجب فك الضغط إلى01 02 02 03 03 03 04 04 04 04 05 05 05 05 05
تقوم الشفرة الزائفة التالية بضغط البيانات:
دالة Encode(بيانات الإدخال) تُهيئ المخرجات كمصفوفة فارغة ، وتُعيّن الفهرس إلى 0 طالما أن الفهرس < عدد البيانات ، قم بتهيئة التسلسل كمصفوفة فارغة ، واضبط العدد على 0. // تسلسل فريد طالما أن العدد ≤ 0x7F والفهرس < عدد البيانات إذا كان الفهرس + 2 < عدد البيانات وكانت البيانات [الفهرس] = البيانات [الفهرس + 1] والبيانات [الفهرس] = البيانات [الفهرس + 2] اخرج من الحلقة // بداية تسلسل متكرر نهاية الشرطأضف البيانات [الفهرس] إلى التسلسل مؤشر الزيادة زيادة العدد نهاية بينماإذا لم يكن التسلسل فارغًا، فأضف (العدد - 1) إلى الناتج. أضف جميع العناصر في التسلسل إلى الناتج. نهاية الشرط .إذا كان الفهرس ≥ عدد البيانات، فاخرج من الحلقة. انتهى الشرط.// تسلسل متكرر قم بتعيين repeatedByte إلى data [index] قم بتعيين count إلى 0 طالما أن count ≤ 0x7F و index ≤ data و data [index] = repeatedByte مؤشر الزيادة زيادة العدد نهاية بينماإذا كان العدد ≥ 3، فأضف (0x80 + العدد - 3) إلى المخرجات، وأضف البايت المتكرر إلى المخرجات . وإلا // أقل من 3 بايتات متكررة، فأضف (العدد - 1) إلى المخرجات. كرر (العدد) مرة، وأضف البايت المتكرر إلى المخرجات. نهاية التكرار. نهاية الشرط. نهاية الحلقة.إرجاع الناتج - نهاية الدالة
مثال: 01 02 02 03 03 03 04 04 04 04 05 05 05 05 05يجب ضغطها إلى02 01 02 02 80 03 81 04 82 05
المشاكل المعروفة
ابتداءً من نظام macOS 11، توجد بعض المشكلات / الأخطاء في تنسيق الملف:
- سيؤدي ضبط is32+ics8 أو ih32+ich8 إلى عرض أيقونة صحيحة. أما ضبط il32+icl8 فيتجاهل قناع الشفافية ويعرض أيقونة بدون شفافية.
- لا تُفسَّر بيانات ARGB المضغوطة بشكل صحيح. تُتجاهل القيمة الأخيرة للقناة الزرقاء (أي القيمة الأخيرة تمامًا) وتُعامل كما لو كانت جميعها أصفارًا. عادةً لا يُمثل هذا مشكلة لأن معظم الرموز تحتوي على شفافية في الزاوية السفلية اليمنى. مع ذلك، قد يُصبح الأمر مُشكلة إذا كانت القيمة الأخيرة بايتًا مُتكررًا (انظر قسم الضغط ). من المُحتمل أن يصل عدد البكسلات التي تفتقر إلى قيمة القناة الزرقاء إلى 130 بكسلًا. يتمثل الحل البديل في إضافة بايت إضافي في النهاية يُفسَّر كحرف تحكم دون بيانات لاحقة. يُمكنك مُقارنة الفرق من خلال هذين المثالين:
69636E73 00000024 69633034 0000001C 41524742 FFFFFBFF FF00FB00 FF00FB00 FFFFFBFF69636E73 00000025 69633034 0000001D 41524742 FFFFFBFF FF00FB00 FF00FB00 FFFFFBFF 00
- يُعاني نظام macOS 10.15.7 (وربما الإصدارات الأقدم) والإصدارات اللاحقة من مشكلة في عرض أيقونات PNG وJPEG 2000 للمفاتيح icp4 (16x16) و icp5 (32x32) و icp6 (64x64). تعمل هذه المفاتيح بشكل سليم في ملف icns مستقل، ولكن عند استخدامها في تطبيق، تُعرض الأيقونات مشوشة تمامًا. الحل هو استخدام تنسيق ARGB الجديد ic04 و ic05 (في macOS 11 والإصدارات الأحدث)، أو تنسيق RGB القديم ذي 24 بت مع قناع ألفا. استخدم التنسيق الأخير مع المفاتيح القديمة is32+s8mk و il32+l8mk ، أو مع المفاتيح الأحدث icp4+s8mk و icp5+l8mk (كتابة بيانات RGB في حقول PNG [ 2 ] ). في حال استخدام بيانات صور ARGB، تأكد من توفير تنسيقات بديلة لنظام macOS 10.15 والإصدارات الأقدم. يصعب اكتشاف هذه المشكلة تحديدًا عند توفير أيقونات بحجم 16×16 و16×16@2x، لأنه عند توصيل جهاز Mac بشاشة غير ريتينا، سيتم استخدام أيقونة 16×16 الخاصة بالشاشات غير ريتينا، وبالتالي ستظهر الأيقونة مشوشة. يبدو أن حقل icp6 غير مستخدم في أيقونات التطبيقات، ويمكن تجاهله بأمان. إضافةً إلى ذلك، إذا لم توفر أحجام الأيقونات الأصغر على الإطلاق، فسيظهر الخلل أيضًا عند تصغير نظام التشغيل لأيقونات PNG/JPEG 2000 الكبيرة، لذا تأكد من عرض الأحجام الأصغر وتضمينها.
يدعم
تتيح تطبيقات متنوعة فتح *.icnsالملفات، بما في ذلك Preview و GTK+ ، كما يوفر بعضها إمكانية التحويل *.icnsمن وإلى صيغة PNG . [ 7 ] [ 8 ] [ 9 ] ومن الأدوات السابقة المتخصصة في دعم ملفات الأيقونات: Icon Composer و icns Browser من Apple، و IconBuilder من The Iconfactory ، و CandyBar من Panic .
يوفر نظام التشغيل macOS أداة سطر الأوامر المدمجة iconutilلضغط *.icnsالملفات وفك ضغطها. [ 10 ]
انظر أيضاً
- تنسيق ICO على نظام التشغيل ويندوز
- تنسيق X PixMap لـ X11
مراجع
- ↑ "إرشادات واجهة المستخدم" . شركة آبل. مؤرشفة من الأصل في 18 يونيو 2018. تم الاطلاع عليها في 10 أبريل 2021 .
- 1 2 3 أيقونة النظام: /System/Library/CoreServices/Applications/Screen Sharing.app/Contents/Resources/InternetLocationVNC.icns ، macOS 11
- ↑ أيقونة النظام: /System/Library/PrivateFrameworks/PassKitCore.framework/Versions/A/Resources/GenericIcon.icns ، نظام macOS 10.15.7
- ↑ أيقونة النظام: /System/Library/PrivateFrameworks/ConsoleKit.framework/Versions/A/Resources/SidebariPhone.icns ، نظام macOS 10.15.7
- ↑ مستودع Fiahfy ICNS
- ↑ أيقونات ماكنتوش
- ↑ "libicns" . مشروع SourceForge icns. 2009. تم الاطلاع عليه بتاريخ 18 أغسطس 2016 .
- ↑ "png2icns" . معين الدين. 2016. تم الاطلاع عليه في 25 مايو 2017 .
- ↑ ليونيل فينسنت (2007). "أيقونات نظام التشغيل ماك أو إس إكس لـ GTK+" . تم الاطلاع عليه بتاريخ 18 أغسطس 2016 .
- ↑ "تحسين الدقة العالية" . developer.apple.com . تم الاطلاع عليه بتاريخ 22 مارس 2025 .
روابط خارجية
- IconFamily (آخر تحديث 2013) – فئة Objective-C مفتوحة المصدر لقراءة وكتابة ملفات Apple icns
- osxiconutils (غير مدعومة) – أدوات سطر الأوامر للعمل مع ملفات Apple icns
- icnsutil – مكتبة بايثون لقراءة وكتابة ملفات icns
- icns - حزمة برمجية مكتوبة بلغة Rust لقراءة وكتابة ملفات icns
- createicns - مكتبة C لقراءة وكتابة ملفات icns
- icon_records_extractor - مكتبة C لاستخراج جميع سجلات icns كأيقونات خاصة بها، بما في ذلك icns الوضع الداكن.
- تنسيقات ملفات الرسومات
- نظام التشغيل macOS
- أيقونات الكمبيوتر
