El formato de imagen de iconos de Apple (.icns) es un formato de iconos utilizado en macOS de Apple Inc. Admite iconos de 16 × 16, 32 × 32, 48 × 48, 128 × 128, 256 × 256 y 512 × 512 puntos a escala 1x y 2x, con canales alfa de 1 y 8 bits y múltiples estados de imagen (por ejemplo, carpetas abiertas y cerradas). El sistema operativo puede escalar los iconos de tamaño fijo y mostrarlos en cualquier tamaño intermedio.
A partir de macOS 11 , los catálogos de recursos son el formato de archivo preferido para los iconos personalizados de macOS. [ 1 ]
Estructura de archivos
El formato del archivo consta de una cabecera de 8 bytes, seguida de cualquier número de iconos.
Encabezamiento
Datos del icono
Tipos de iconos
- 1. El valor dentro del paréntesis es la longitud sin comprimir para los iconos ARGB y RGB de 24 bits.
- 2. Los datos it32 siempre comienzan con un encabezado de cuatro bytes cero (probado en todos los archivos icns de macOS 10.15.7 y macOS 11). Se desconoce su uso; los cuatro bytes cero pueden tener cualquier valor y se ignoran silenciosamente.
- †. Estos formatos son compatibles con archivos icns independientes, pero no se muestran correctamente si se utilizan como icono de aplicación dentro de un paquete .app .
Formato de datos de imagen
- Los iconos monocromáticos con máscara alfa pueden mostrar tres colores: blanco, negro y transparente.
- Los iconos de 4 y 8 bits utilizan una paleta de colores fija con 16 y 256 colores, respectivamente.
- El formato RGB de 24 bits consta de tres canales comprimidos y muy juntos (véase Compresión ). El icono it32 debe comenzar con una cabecera de cuatro bytes (véase la nota al pie anterior).
- El formato ARGB consta de los valores ASCII para 'ARGB' y los cuatro canales comprimidos muy juntos (ver Compresión ).
Compatibilidad
- Los campos ARGB también aceptan archivos en formato PNG, pero no al revés; no se pueden colocar imágenes ARGB en ninguno de los campos que solo admiten PNG (probado en macOS 11).
- Las imágenes ARGB solo son compatibles con macOS 11 y versiones posteriores; macOS 10.15.7 no las muestra. Sin embargo, incluso las teclas ARGB pueden visualizarse en macOS 10.15 si se configura una imagen JPEG 2000 o PNG (consulte la nota al pie sobre el uso en paquetes de aplicaciones más arriba).
- Los iconos RGB de 24 bits ( is32 , il32 , ih32 , it32 ) también permiten imágenes en formato JPEG 2000 y PNG (probado en macOS 10.15.7 y macOS 11).
- La compatibilidad con los tipos de imagen más recientes parece haberse implementado posteriormente al campo clave (véanse los dos puntos anteriores). Por lo tanto, la versión del sistema operativo compatible podría no ser precisa o estar ajustada según el formato del archivo.
Otros tipos
- La tabla de contenido es una lista de todos los tipos que contiene (nombre del tipo de 4 bytes + longitud de 4 bytes).
- Los datos de todos los archivos icns anidados no contienen el encabezado del archivo icns. Por lo tanto, si desea guardar los datos en un archivo, debe anteponer el encabezado icns .
Tipos de elementos que no son PNG / JPEG2000
Los tipos de elementos que manejan formatos de imagen ARGB (32 bits) o RGB (24 bits) requieren diferentes tipos de encabezados antes de los datos binarios. Este encabezado forma parte de los datos de la imagen y no es el valor del tipo de elemento de icono big-endian de 4 bytes (por ejemplo, ic04 o ic05). [ 5 ]
Elementos ARGB
Las imágenes ARGB deben tener su porción binaria de datos de imagen precedida por el encabezado 'ARGB' de cuatro bytes. Posteriormente, en lugar de almacenar cada píxel con sus cuatro canales juntos (por ejemplo, ARGBARGBARGB), una imagen con tres píxeles se almacenaría en canales individuales de datos de píxeles (por ejemplo, AAARRRGGGBBB). Además, cada canal de datos de píxeles debe codificarse como se indica a continuación.
elementos RGB
Las imágenes RGB tienen su parte binaria de los datos de imagen precedida por cuatro caracteres de byte cero solo cuando el tipo de elemento es 'it32'. En todos los demás casos, no se necesita encabezado. Los datos de canal se separan como con los datos binarios ARGB (por ejemplo, RRRGGGBBB en lugar de RGBRGBRGB). Cada canal también debe codificarse como se indica a continuación.
Elementos de máscara
Los elementos de la máscara no se codifican como los datos de los canales de color de las imágenes ARGB y RGB. Los datos son los mismos que los de una imagen ARGB, excepto que solo se proporcionan los datos del canal alfa. Por lo tanto, para una imagen que tiene dos píxeles, ARGBARGB, los datos de la máscara son AA.
Compresión
Con el tiempo, el formato se ha mejorado y ahora admite la compresión de algunas partes de los datos de píxeles. Los datos de píxeles RGB de 24 bits ( is32 , il32 , ih32 , it32 , icp4 , icp5 ) y ARGB ( ic04 , ic05 , icsb ) se comprimen (por canal) con un formato similar a PackBits . [ 6 ] Algunas fuentes mencionan que el sistema operativo admite tanto fragmentos de datos comprimidos como sin comprimir. Sin embargo, la creación manual de archivos icns con imágenes RGB o ARGB de 24 bits sin comprimir no se mostrará correctamente, al menos en las versiones más recientes de macOS (probado en macOS 11).
Aquí tenéis un repositorio de GitHub con código Swift que parece pasar la prueba tanto de codificación como de decodificación, tal como se describe aquí: ByteRunLengthCoder
El siguiente pseudocódigo descomprime los datos:
Mientras haya datos comprimidos : Lee un byte como un número sin signo N. Si N < 0x80: Imprime los siguientes (N + 1) bytes Demás : Imprime el siguiente byte (N - 0x80 + 3) veces
Ejemplo: 02 01 02 02 80 03 81 04 82 05debería descomprimirse a01 02 02 03 03 03 04 04 04 04 05 05 05 05 05
El siguiente pseudocódigo comprime los datos:
Función Codificar(datos de entrada) Inicializa la salida como un array vacío. Establece el índice en 0. Mientras el índice sea menor que el recuento de datos Inicializar la secuencia como una matriz vacía Establecer el recuento en 0 // Secuencia única Mientras count ≤ 0x7F y index < count of data Si index + 2 < count of data y data [index] = data [index+1] y data [index] = data [index+2] Salir del bucle // Inicio de una secuencia repetitiva Fin SiAgregar datos [índice] a la secuencia Índice de incremento Contador de incrementos Fin MientrasSi la secuencia no está vacía, agregar (count - 1) a la salida. Agregar todos los elementos de la secuencia a la salida. Fin SiSi el índice es mayor o igual que el número de datos, salir del bucle . Fin del bucle .// Secuencia repetitiva Establecer repeatedByte a data [index] Establecer count a 0 Mientras count ≤ 0x7F y index ≤ data y data [index] = repeatedByte Índice de incremento Contador de incrementos Fin MientrasSi count ≥ 3 Agregar (0x80 + count - 3) a la salida Agregar repeatedByte a la salida De lo contrario // Menos de 3 bytes repetidos Agregar (count - 1) a la salida Repetir (count) veces Agregar repeatedByte a la salida Fin Repetir Fin Si Fin MientrasDevolver salida Fin de la función
Ejemplo: 01 02 02 03 03 03 04 04 04 04 05 05 05 05 05debería comprimirse a02 01 02 02 80 03 81 04 82 05
Problemas conocidos
A partir de macOS 11, existen ciertos problemas/errores con el formato de archivo:
- Al configurar is32+ics8 o ih32+ich8 se mostrará un icono correcto. Pero al configurar il32+icl8 se ignora la máscara de transparencia y se muestra un icono sin transparencia.
- Los datos ARGB comprimidos no se interpretan correctamente. El último valor del canal azul (es decir, el último valor) se ignora y se trata como si fueran todos bytes cero. Normalmente esto no supone un problema, ya que la mayoría de los iconos tendrán transparencia en la esquina inferior derecha. Sin embargo, puede convertirse en un problema si el último valor es un byte repetido (véase Compresión ). Potencialmente, hasta 130 píxeles pueden carecer del valor del canal azul. Una solución consiste en añadir un byte adicional al final, que se interpreta como un carácter de control sin datos posteriores. Puede comparar la diferencia con estos dos ejemplos:
69636E73 00000024 69633034 0000001C 41524742 FFFFFBFF FF00FB00 FF00FB00 FFFFFBFF69636E73 00000025 69633034 0000001D 41524742 FFFFFBFF FF00FB00 FF00FB00 FFFFFBFF 00
- macOS 10.15.7 (probablemente anterior) y versiones posteriores tienen un problema al mostrar iconos PNG y JPEG 2000 para las teclas icp4 (16x16), icp5 (32x32) e icp6 (64x64). Las teclas funcionan correctamente en un archivo icns independiente, pero si se usan en una aplicación, los iconos se muestran completamente distorsionados. Use el nuevo formato ARGB ic04 e ic05 (macOS 11+) o el antiguo formato RGB de 24 bits + máscara alfa. Use este último con las teclas antiguas is32+s8mk e il32+l8mk , o con las teclas más recientes icp4+s8mk e icp5+l8mk (escribiendo datos RGB en campos PNG [ 2 ] ). Si usa datos de imagen ARGB, asegúrese de proporcionar formatos alternativos para macOS 10.15 y versiones anteriores. Este problema es especialmente difícil de detectar si proporciona iconos de 16x16 y 16x16@2x, ya que si conecta su Mac a un monitor que no sea Retina, se utilizará el icono de 16x16 para monitores no Retina y, por lo tanto, el icono se mostrará distorsionado. El campo icp6 no parece utilizarse en los iconos de las aplicaciones y puede ignorarse sin problema. Además, si no proporciona iconos de menor tamaño, el error también se manifestará cuando el sistema operativo reduzca el tamaño de sus iconos PNG/JPEG 2000 más grandes, así que asegúrese de renderizar tamaños más pequeños e incluirlos.
Apoyo
Varias aplicaciones pueden abrir *.icnsarchivos, incluyendo Vista Previa y GTK+ , y algunas ofrecen la posibilidad de convertir *.icnsa y desde PNG . [ 7 ] [ 8 ] [ 9 ] Las herramientas anteriores especializadas en la compatibilidad con archivos de iconos incluyen Icon Composer e icns Browser de Apple, IconBuilder de The Iconfactory y CandyBar de Panic .
macOS ofrece la herramienta de línea de comandos integrada iconutilpara comprimir y descomprimir *.icnsarchivos. [ 10 ]
Véase también
- Formato ICO en Windows
- Formato X PixMap para X11
Referencias
- ↑ "Directrices de interfaz humana" . Apple Inc. Archivado del original el 18 de junio de 2018. Consultado el 10 de abril de 2021 .
- 1 2 3 Icono del sistema: /System/Library/CoreServices/Applications/Screen Sharing.app/Contents/Resources/InternetLocationVNC.icns , macOS 11
- ↑ Icono del sistema: /System/Library/PrivateFrameworks/PassKitCore.framework/Versions/A/Resources/GenericIcon.icns , macOS 10.15.7
- ↑ Icono del sistema: /System/Library/PrivateFrameworks/ConsoleKit.framework/Versions/A/Resources/SidebariPhone.icns , macOS 10.15.7
- ↑ Repositorio ICNS de Fiahfy
- ↑ Iconos de Macintosh
- ↑ "libicns" . Proyecto SourceForge icns. 2009. Consultado el 18 de agosto de 2016 .
- ↑ "png2icns" . Moin Uddin. 2016. Consultado el 25 de mayo de 2017 .
- ↑ Lyonel Vincent (2007). "Iconos de Mac OS X para GTK+" . Consultado el 18 de agosto de 2016 .
- ↑ "Optimización para alta resolución" . developer.apple.com . Consultado el 22 de marzo de 2025 .
Enlaces externos
- IconFamily (última actualización 2013) – Clase de código abierto en Objective-C para leer y escribir archivos icns de Apple.
- osxiconutils (sin mantenimiento) – Herramientas de línea de comandos para trabajar con archivos icns de Apple
- icnsutil : biblioteca de Python para leer y escribir archivos ICNS.
- icns - Paquete Rust para leer y escribir archivos icns
- createicns - Biblioteca C para leer y escribir archivos icns
- icon_records_extractor - Biblioteca C para extraer todos los registros icns como iconos propios, incluidos los icns del modo oscuro.
- formatos de archivos gráficos
- macOS
- iconos de computadora