Articulo de referencia

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 × 51...

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 íconos personalizados de macOS. [1]

Estructura de archivo

El formato de archivo consta de un encabezado de 8 bytes, seguido de cualquier cantidad de íconos.

Datos del icono

Tipos de iconos

  • 1. El valor dentro del paréntesis es la longitud sin comprimir para los íconos ARGB y RGB de 24 bits.
  • 2. Los datos it32 siempre comienzan con un encabezado de cuatro bytes cero (se probaron todos los archivos icns en macOS 10.15.7 y macOS 11). Uso desconocido, los cuatro bytes cero pueden ser cualquier valor y se ignoran silenciosamente.
  • †. Estos formatos son compatibles con archivos icns independientes, pero no se muestran correctamente si se utilizan como ícono de aplicación dentro de un paquete .app .

Formato de datos de imagen

  • Los íconos mono con máscara alfa pueden mostrar tres colores: blanco, negro y transparente.
  • Los íconos de 4 y 8 bits utilizan una paleta de colores fija con 16 colores y 256 colores, respectivamente.
  • El formato RGB de 24 bits consta de tres canales comprimidos y muy compactos (consulte Compresión). El icono it32 debe comenzar con un encabezado de cuatro bytes, consulte la nota al pie anterior.
  • El formato ARGB consta de los valores ASCII para 'ARGB' y los cuatro canales comprimidos (ver Compresión).

Compatibilidad

  • Los campos ARGB también aceptan archivos en formato PNG, pero no al revés, no puedes colocar imágenes ARGB en ninguno de los campos exclusivos de PNG (probado en macOS 11).
  • Las imágenes ARGB solo son compatibles con macOS 11 y versiones posteriores. macOS 10.15.7 no muestra imágenes ARGB. Sin embargo, incluso las teclas ARGB se pueden mostrar en macOS 10.15 si configura una imagen JPEG 2000 o PNG (consulte la nota al pie sobre el uso en paquetes de aplicaciones más arriba).
  • Los íconos RGB de 24 bits ( is32 , il32 , ih32 , it32 ) también permiten imágenes en formato JPEG 2000 y PNG (probados en macOS 10.15.7 y macOS 11).
  • Parece que la compatibilidad con tipos de imágenes más nuevos se introdujo más tarde que la del campo clave (consulte los dos puntos anteriores). Por lo tanto, es posible que la versión del sistema operativo compatible no sea precisa o no esté ajustada en función del formato de archivo.

Otros tipos

  • La tabla de contenido es una lista de todos los tipos contenidos (nombre de 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 trabajan con formatos de imagen ARGB (32 bits) o RGB (24 bits) requieren distintos 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 parte binaria de los datos de la imagen precedida por el encabezado 'ARGB' de cuatro bytes. Después de eso, en lugar de almacenar cada píxel con cada uno de sus cuatro canales 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 parte binaria de los datos de la 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 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 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 máscara son AA.

Compresión

Con el tiempo, el formato se ha mejorado y hay soporte para 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 fragmentos de datos comprimidos o sin comprimir. [ cita requerida ] Sin embargo, la creación manual de archivos icns con imágenes RGB o ARGB de 24 bits sin comprimir no se mostrarán correctamente, al menos en las versiones más nuevas 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 de decodificación como se describe aquí: ByteRunLengthCoder

El siguiente pseudocódigo descomprime los datos:

Mientras haya datos comprimidos :
    Leer un byte como un número sin signo N
     Si N < 0x80:
        Generar 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 05debe 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 Encode(datos de entrada)
   Inicializa la salida como una matriz vacía 
  Establece el índice en 0

  Mientras el índice < el recuento de datos
     Inicializar la secuencia como una matriz vacía 
    Establecer el recuento en 0

    // Secuencia única 
    While count  0x7F e índice < recuento de datos
       If index + 2 < recuento de datos y datos [índice]  = datos [índice+1] y datos [índice] = datos [índice+2] Romper el bucle // Inicio de una secuencia repetitiva Fin If  
          
       

      Añadir datos [índice] a la secuencia 
      Indice de incremento
      Incrementar recuento
    Terminar  mientras

    Si la secuencia no está vacía 
      Agregar (recuento - 1) a la salida
       Agregar todos los elementos en secuencia a la salida
     Fin  si

    Si índice  número de datos
       Romper el bucle 
    Fin  Si

    // Secuencia repetida 
    Establezca repeatByte en datos [índice] Establezca count en 0
     Mientras count  0x7F e índice  datos y datos [índice] = repeatByte
     
      Indice de incremento
      Incrementar recuento
    Terminar  mientras

    Si count  3
       Añadir (0x80 + count - 3) a la salida
       Añadir repeatByte a la salida
     De lo contrario   // Menos de 3 bytes repetidos 
      Añadir (count - 1) a la salida
       Repetir (count) veces
         Añadir repeatByte a la salida
       Fin de  repetición 
    Fin  si 
  Fin  mientras

  Devolver salida
 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. La configuración is32+ics8 o ih32+ich8 mostrará un ícono adecuado, pero la configuración il32+icl8 ignora la máscara de transparencia y muestra un ícono sin transparencia.
  2. 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 estuviera compuesto por 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 los datos siguientes. Puede 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 teclas funcionan bien en un archivo icns independiente, pero si se usan en una aplicación, los íconos se muestran completamente desordenados. 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 antiguas teclas is32+s8mk e il32+l8mk , o con las teclas más nuevas 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 complicado de detectar si proporcionas iconos de 16x16 y 16x16@2x, porque si conectas tu Mac a un monitor que no sea retina, se utilizará el icono de 16x16 que no sea retina y, por lo tanto, el icono se mostrará desordenado. El campo icp6 no parece utilizarse en los iconos de las aplicaciones y se puede ignorar sin problemas. Además, si no proporcionas los tamaños de icono más pequeños, el error también se manifestará cuando el sistema operativo reduzca el tamaño de los iconos PNG/JPEG 2000 más grandes, así que asegúrate de representar tamaños más pequeños e incluirlos.

Apoyo

Varios visores de imágenes pueden cargar archivos, y también existen *.icnsconvertidores 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 e icns Browser , The Iconfactory y IconBuilder .
MacOS [ aclaración necesaria ] ofrece la herramienta de línea de comandos incorporada iconutilpara empaquetar y descomprimir *.icnsarchivos.

Véase también

Referencias

  1. ^ "Directrices 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: /Sistema/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. ^ "libicns". Proyecto icns de SourceForge . 2009. Consultado el 18 de agosto de 2016 .
  8. ^ "png2icns". Moin Uddin. 2016. Consultado el 25 de mayo de 2017 .
  9. ^ Lyonel Vincent (2007). «Iconos de Mac OS X para GTK+» . Consultado el 18 de agosto de 2016 .
  • IconFamily (última actualización 2013): clase Objective C de código abierto para leer y escribir archivos icns de Apple
  • osxiconutils (no se mantiene): herramientas de línea de comandos para trabajar con archivos icns de Apple
  • icnsutil – Biblioteca de Python para leer y escribir archivos icns
  • icns - Caja de 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 sus propios íconos, incluidos los icns en modo oscuro.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Formato_de_imagen_del_icono_de_Apple&oldid=1195008044"