stringtranslate.com

Formato de imagen del icono de Apple

El formato de imagen de icono de Apple (.icns) es un formato de icono utilizado en macOS de Apple Inc. Admite iconos de 16 × 16, 32 × 32, 48 × 48, 128 × 128, 256 × 256, 512 × 512 puntos en escala 1x y 2x, con canales alfa de 1 y 8 bits y múltiples estados de imagen (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 activos son el formato de archivo preferido para los iconos personalizados de macOS. [1]

Estructura de archivos

El formato de archivo consta de un encabezado de 8 bytes, seguido de cualquier número de iconos.

Encabezamiento

Datos del icono

Tipos de iconos

Formato de datos de imagen

Compatibilidad

Otros tipos

Tipos de elementos que no son PNG/JPEG2000

Los tipos de elementos que tratan con formatos de imagen ARGB (32 bits) o RGB (24 bits) requieren diferentes tipos de encabezados antes de los datos binarios. Es importante tener en cuenta que este encabezado es 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 los datos de la imagen precedida por el encabezado 'ARGB' de cuatro bytes. Después de eso, en lugar de cada píxel con cada uno de sus cuatro canales almacenados juntos (por ejemplo, ARGBARGBARGB), se almacenaría una imagen con tres píxeles en canales individuales de datos de píxeles (por ejemplo, AAARRRGGGBBB). Además, cada canal de datos de píxeles debe codificarse como se menciona a continuación.

Elementos RGB Las imágenes RGB tienen su porción binaria de los datos de la imagen precedida por cuatro caracteres de cero bytes sólo cuando el tipo de elemento es 'it32'. En todos los demás casos, no se necesita ningún encabezado. Los datos del canal se separan como con los datos binarios ARGB (por ejemplo, RRRGGGBBB en lugar de RGBRGBRGB). Cada canal también debe codificarse como se menciona a continuación.

Elementos de máscara Los elementos de máscara no están codificados como los datos del canal de color de imagen ARGB y RGB. Los datos son los mismos que los de una imagen ARGB excepto que solo se proporcionan los datos del canal alfa. Entonces, 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 se admite la compresión de algunas partes de los datos de píxeles. Los datos de píxeles RGB ( is32 , il32 , ih32 , it32 , icp4 , icp5 ) y ARGB ( ic04 , ic05 , icsb ) de 24 bits se comprimen (por canal) con un formato similar a PackBits . [6] Algunas fuentes mencionan que el sistema operativo admite fragmentos de datos tanto comprimidos como sin comprimir. [ cita necesaria ] 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í hay un repositorio de GitHub con un código rápido que parece pasar la prueba tanto de codificación como decodificación como se describe aquí: ByteRunLengthCoder

El siguiente pseudocódigo descomprime los datos:

Mientras haya datos comprimidos: Lea un byte como un número sin signo N Si N < 0x80: Genera los siguientes (N + 1) bytes Demás : Genera el siguiente byte (N - 0x80 + 3) veces

Ejemplo: 02 01 02 02 80 03 81 04 82 05debería descomprimirse para01 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) Inicializar la salida como una matriz vacía  Establecer el índice en 0 Mientras que el índice < el recuento de datos Inicializa la secuencia como una matriz vacía  Establece el recuento en 0 // Secuencia única  Mientras recuento  0x7F e índice < recuento de datos Si índice + 2 < recuento de datos y datos [índice]  = datos [índice+1] y datos [índice] = datos [índice+2] Romper el ciclo / / Inicio de una secuencia repetitiva Fin si       Agregar datos [índice] a la secuencia  Índice de incremento Recuento de incrementos terminar  mientras Si la secuencia no está vacía  Agregar (cuenta - 1) a la salida Agregar todos los elementos en secuencia a la salida Finalizar  si Si índice  recuento de datos Romper el ciclo  Finalizar  si // Secuencia de repetición  Establecer byte repetido en datos [índice] Establecer el recuento en 0 Mientras que el recuento  0x7F y el índice  datos y datos [índice] = Byte repetido   Índice de incremento Recuento de incrementos terminar  mientras Si el recuento  3 Agregar (0x80 + recuento - 3) a la salida Agregar bytes repetidos a la salida De lo contrario  // Menos de 3 bytes repetidos  Agregar (recuento - 1) a la salida Repetir (recuento) veces Agregar bytes repetidos a la salida Finalizar  Repetir  Fin  si  finaliza  mientras Salida de retorno Función final 

Ejemplo: 01 02 02 03 03 03 04 04 04 04 05 05 05 05 05debe 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:

  1. Al configurar is32+ics8 o ih32+ich8 se mostrará un icono adecuado. Pero configurar il32+icl8 ignora la máscara de transparencia y muestra un icono sin transparencia.
  2. Los datos ARGB comprimidos no se interpretan correctamente. El último valor del canal azul (también conocido como el último valor) se ignora y se trata como si fuera todo de cero bytes. Por lo general, esto no es un problema ya que la mayoría de los íconos tendrán transparencia en la esquina inferior derecha de todos modos. Sin embargo, puede convertirse en un problema si el último valor es un byte repetido (consulte Compresión). Potencialmente, hasta 130 píxeles pueden carecer del valor del canal azul.
    Una solución alternativa es agregar un byte adicional al final que se interpreta como un carácter de control sin datos posteriores. Puedes comparar la diferencia con estos dos ejemplos:
    • 69636E73 00000024 69633034 0000001C 41524742 FFFFFBFF FF00FB00 FF00FB00 FFFFFBFF
    • 69636E73 00000025 69633034 0000001D 41524742 FFFFFBFF FF00FB00 FF00FB00 FFFFFBFF 00
  3. macOS 10.15.7 (probablemente anterior) y versiones posteriores tienen un problema al mostrar íconos PNG y JPEG 2000 para las teclas icp4 (16x16), icp5 (32x32) e icp6 (64x64). Las claves funcionan bien en un archivo icns independiente, pero si se usan en una aplicación, los íconos se muestran completamente codificados. Utilice el nuevo formato ARGB ic04 e ic05 (macOS 11+) o el antiguo formato de máscara alfa RGB + de 24 bits. Utilice este último con las claves antiguas is32+s8mk y il32+l8mk , o con las claves más nuevas icp4+s8mk y icp5+l8mk (escribiendo datos RGB en campos PNG [2] ). Si utiliza 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 íconos de 16x16 y 16x16@2x, porque si conecta su Mac a un monitor sin retina, se usará el ícono sin retina de 16x16 y, por lo tanto, el ícono se mostrará codificado. El campo icp6 no parece usarse en los íconos de aplicaciones y puede ignorarse con seguridad. Además, si no proporciona los tamaños de íconos más pequeños, el error también se manifestará cuando el sistema operativo reduzca los íconos PNG/JPEG 2000 más grandes, así que asegúrese de representar tamaños más pequeños e incluirlos.

Apoyo

Varios visores de imágenes pueden cargar *.icnsarchivos y también existen convertidores gratuitos y de código abierto desde o hacia PNG . [7] [8] GTK+ puede cargar *.icnsrecursos desde 2007. [9] Otras herramientas que admiten el formato incluyen Apple Icon Composer y icns Browser , The Iconfactory e IconBuilder .
MacOS [ se necesita aclaración ] ofrece la herramienta de línea de comandos incorporada iconutilpara empaquetar y descomprimir *.icnsarchivos.

Ver también

Referencias

  1. ^ "Pautas de interfaz humana". Apple Inc. Archivado desde el original el 18 de junio de 2018 . Consultado el 10 de abril de 2021 .
  2. ^ abc Icono del sistema: /System/Library/CoreServices/Applications/Screen Sharing.app/Contents/Resources/InternetLocationVNC.icns , macOS 11
  3. ^ Ícono del sistema: /System/Library/PrivateFrameworks/PassKitCore.framework/Versions/A/Resources/GenericIcon.icns , macOS 10.15.7
  4. ^ Ícono del sistema: /System/Library/PrivateFrameworks/ConsoleKit.framework/Versions/A/Resources/SidebariPhone.icns , macOS 10.15.7
  5. ^ Repositorio ICNS de Fiahfy
  6. ^ Iconos de Macintosh
  7. ^ "libros". Iconos del proyecto SourceForge . 2009 . Consultado el 18 de agosto de 2016 .
  8. ^ "png2icns". Moin Uddin. 2016 . Consultado el 25 de mayo de 2017 .
  9. ^ Lyonel Vicente (2007). "Iconos de Mac OS X para GTK+" . Consultado el 18 de agosto de 2016 .

enlaces externos