stringtranslate.com

PNG

Portable Network Graphics ( PNG , oficialmente pronunciado / p ɪ ŋ / [2] [3] PING , pronunciado coloquialmente / ˌ p ɛ n ˈ / [4] PEE -en- JEE ) es un formato de archivo de gráficos rasterizados que Admite compresión de datos sin pérdidas . [5] PNG se desarrolló como un reemplazo mejorado y no patentado del formato de intercambio de gráficos (GIF); extraoficialmente, las iniciales PNG representaban el acrónimo recursivo "PNG no es GIF". [6]

PNG admite imágenes basadas en paletas (con paletas de colores RGB de 24 bits o RGBA de 32 bits ), imágenes en escala de grises (con o sin canal alfa para transparencia) e imágenes RGB o RGBA a todo color sin paleta. El grupo de trabajo PNG diseñó el formato para transferir imágenes en Internet , no para gráficos impresos de calidad profesional; por lo tanto, no se admiten espacios de color que no sean RGB, como CMYK . Un archivo PNG contiene una única imagen en una estructura extensible de fragmentos , que codifica los píxeles básicos y otra información, como comentarios textuales y comprobaciones de integridad documentadas en RFC 2083. [7]

Los archivos PNG tienen la extensión de archivo ".png" y el tipo de medio MIME "image/png" . [8] PNG se publicó como RFC 2083 informativo en marzo de 1997 y como estándar ISO/IEC 15948 en 2004. [1]

Historia y desarrollo

La motivación para crear el formato PNG fue descubrir, el 28 de diciembre de 1994, que el algoritmo de compresión de datos Lempel-Ziv-Welch (LZW) utilizado en el formato Graphics Interchange Format (GIF) estaba patentado por Unisys . La patente exigía que todo el software compatible con GIF pagara regalías, lo que provocó una avalancha de críticas por parte de los usuarios de Usenet . Uno de ellos fue Thomas Boutell, quien el 4 de enero de 1995 publicó un hilo de discusión precursor en el grupo de noticias de Usenet "comp.graphics" en el que ideó un plan para una alternativa gratuita al GIF. Otros usuarios en ese hilo presentaron muchas propuestas que luego serían parte del formato de archivo final. Oliver Fromme, autor del popular visor JPEG QPEG, propuso el nombre PING, que finalmente se convirtió en PNG, un acrónimo recursivo que significa que PING no es GIF , [9] y también la extensión . Otras sugerencias implementadas posteriormente incluyeron el algoritmo de compresión deflate y la compatibilidad con colores de 24 bits ; la falta de este último en GIF también motivó al equipo a crear su formato de archivo. El grupo se conocería como PNG Development Group y, a medida que la discusión se expandió rápidamente, más tarde utilizó una lista de correo asociada con un foro de CompuServe . [2] [10].png

La especificación completa de PNG se publicó bajo la aprobación del W3C el 1 de octubre de 1996, y posteriormente como RFC 2083 el 15 de enero de 1997. La especificación se revisó el 31 de diciembre de 1998 como versión 1.1, que solucionó problemas técnicos de corrección de gamma y color . La versión 1.2, publicada el 11 de agosto de 1999, añadió el iTXtfragmento como único cambio en la especificación, y una versión reformateada de 1.2 fue publicada como segunda edición del estándar W3C el 10 de noviembre de 2003, [11] y como estándar internacional (ISO/ IEC 15948:2004) el 3 de marzo de 2004. [12] [1]

Aunque GIF permite la animación , se decidió que PNG debería ser un formato de una sola imagen. [13] En 2001, los desarrolladores de PNG publicaron el formato de gráficos de red de imágenes múltiples (MNG), con soporte para animación. MNG logró un soporte de aplicaciones moderado, pero no suficiente entre los principales navegadores web y ningún uso entre los diseñadores o editores de sitios web. En 2008, ciertos desarrolladores de Mozilla publicaron el formato Animated Portable Network Graphics (APNG) con objetivos similares. APNG es un formato compatible de forma nativa con los navegadores web basados ​​en Gecko y Presto y también se usa comúnmente para miniaturas en el sistema PlayStation Portable de Sony (usando la extensión de archivo PNG normal). En 2017, los navegadores basados ​​en Chromium adoptaron la compatibilidad con APNG. En enero de 2020, Microsoft Edge pasó a basarse en Chromium , heredando así el soporte para APNG. Con esto, todos los principales navegadores ahora son compatibles con APNG.

Grupo de Trabajo de PNG

La especificación PNG original fue escrita por un grupo ad hoc de expertos y entusiastas de los gráficos por computadora . Las discusiones y decisiones sobre el formato se llevaron a cabo por correo electrónico. Los autores originales enumerados en RFC 2083 son: [14]

Formato de archivo

La imagen PNGvisto con una aplicación de edición hexadecimal para Ubuntu

encabezado de archivo

Un archivo PNG comienza con una firma de 8 bytes [15] (consulte la imagen del editor hexadecimal a la derecha):

"fragmentos" dentro del archivo

Después del encabezado, viene una serie de fragmentos , [16] cada uno de los cuales transmite cierta información sobre la imagen. Los fragmentos se declaran críticos o auxiliares , y un programa que encuentre un fragmento auxiliar que no comprenda puede ignorarlo con seguridad. Esta estructura de capa de almacenamiento basada en fragmentos, similar en concepto a un formato contenedor o al IFF de Amiga , está diseñada para permitir que el formato PNG se extienda manteniendo la compatibilidad con versiones anteriores; proporciona compatibilidad hacia adelante y esta misma estructura de archivos ( con diferentes firmas y fragmentos) se utiliza en los formatos asociados MNG , JNG y APNG .

Un fragmento consta de cuatro partes: longitud (4 bytes, [17] big-endian ), tipo/nombre del fragmento (4 bytes [18] ), datos del fragmento (bytes de longitud) y CRC (código de redundancia cíclica/suma de comprobación; 4 bytes [ 17] ). El CRC es un CRC-32 de orden de bytes de red que se calcula sobre el tipo de fragmento y los datos del fragmento, pero no sobre la longitud.

Los tipos de fragmentos reciben un tipo/nombre ASCII de cuatro letras que distingue entre mayúsculas y minúsculas ; comparar FourCC . El caso de las diferentes letras del nombre (bit 5 del valor numérico del carácter) es un campo de bits que proporciona al decodificador cierta información sobre la naturaleza de los fragmentos que no reconoce.

El caso de la primera letra indica si el fragmento es crítico o no. Si la primera letra es mayúscula, el fragmento es fundamental; si no, el trozo es auxiliar. Los fragmentos críticos contienen información necesaria para leer el archivo. Si un decodificador encuentra un fragmento crítico que no reconoce, debe cancelar la lectura del archivo o proporcionar al usuario una advertencia adecuada.

El caso de la segunda letra indica si el fragmento es "público" (ya sea en la especificación o en el registro de fragmentos públicos con fines especiales) o "privado" (no estandarizado). Las mayúsculas son públicas y las minúsculas son privadas. Esto garantiza que los nombres de fragmentos públicos y privados nunca puedan entrar en conflicto entre sí (aunque dos nombres de fragmentos privados podrían entrar en conflicto).

La tercera letra debe estar en mayúscula para cumplir con la especificación PNG. Está reservado para futuras ampliaciones. Los decodificadores deben tratar un fragmento con una tercera letra minúscula de la misma manera que cualquier otro fragmento no reconocido.

El caso de la cuarta letra indica si es seguro copiar el fragmento por parte de editores que no lo reconocen. Si está en minúsculas, el fragmento se puede copiar de forma segura independientemente del alcance de las modificaciones realizadas en el archivo. Si está en mayúscula, sólo se puede copiar si las modificaciones no han tocado ningún fragmento crítico.

trozos críticos

Un decodificador debe poder interpretar fragmentos críticos para leer y representar un archivo PNG.

Como afirma el World Wide Web Consortium , la profundidad de bits se define como "el número de bits por muestra o por índice de paleta (no por píxel)". [11]

El PLTEtrozo es imprescindible para el color tipo 3 (color indexado). Es opcional para los tipos de color dos y seis (color verdadero y color verdadero con alfa) y no debe aparecer para los tipos de color 0 y 4 (escala de grises y escala de grises con alfa).

trozos auxiliares

Otros atributos de imagen que se pueden almacenar en archivos PNG incluyen valores gamma , color de fondo e información de metadatos textuales . PNG también admite la gestión del color mediante la inclusión de perfiles de color ICC . [21]

La primera letra minúscula en estos fragmentos indica que no son necesarios para la especificación PNG. La última letra minúscula en algunos fragmentos indica que es seguro copiarlos, incluso si la aplicación en cuestión no los comprende.

Formato de píxeles

Los píxeles en imágenes PNG son números que pueden ser índices de datos de muestra en la paleta o los datos de muestra mismos. La paleta es una tabla separada contenida en el fragmento PLTE. Los datos de muestra de un solo píxel constan de una tupla de entre uno y cuatro números. Ya sea que los datos de píxeles representen índices de paleta o valores de muestra explícitos, los números se denominan canales y cada número en la imagen está codificado con un formato idéntico.

Los formatos permitidos codifican cada número como un valor entero sin signo utilizando un número fijo de bits, denominado en la especificación PNG profundidad de bits . Tenga en cuenta que esto no es lo mismo que profundidad de color , que se usa comúnmente para referirse al número total de bits en cada píxel, no en cada canal. Las profundidades de bits permitidas se resumen en la tabla junto con el número total de bits utilizados para cada píxel.

El número de canales depende de si la imagen es en escala de grises o en color y si tiene canal alfa . PNG permite las siguientes combinaciones de canales, denominadas tipo de color .

Una demostración de la profundidad de color en un archivo PNG, en bits por canal. Izquierda: 8 bits; Derecha: 16 bits. Tenga en cuenta los artefactos , contraste ajustado para mayor claridad.

El tipo de color se especifica como un valor de 8 bits; sin embargo, sólo se utilizan los tres bits inferiores y, aun así, sólo se permiten las cinco combinaciones enumeradas anteriormente. Siempre que el tipo de color sea válido, se puede considerar como un campo de bits como se resume en la tabla adyacente:

Con imágenes en color indexadas, la paleta siempre almacena colores tricromáticos a una profundidad de 8 bits por canal (24 bits por entrada de paleta). Además, se puede incluir una lista opcional de valores alfa de 8 bits para las entradas de la paleta; si no se incluye, o si es más corto que la paleta, se supone que las entradas restantes de la paleta son opacas. La paleta no debe tener más entradas de las que permite la profundidad de bits de la imagen, pero puede tener menos (por ejemplo, si una imagen con píxeles de 8 bits solo usa 90 colores, entonces no necesita entradas de paleta para los 256 colores). La paleta debe contener entradas para todos los valores de píxeles presentes en la imagen.

El estándar permite que los PNG de color indexados tengan 1, 2, 4 u 8 bits por píxel; Las imágenes en escala de grises sin canal alfa pueden tener 1, 2, 4, 8 o 16 bits por píxel. Todo lo demás utiliza una profundidad de bits por canal de 8 o 16. Las combinaciones que esto permite se dan en la tabla anterior. El estándar exige que los decodificadores puedan leer todos los formatos de color admitidos, pero muchos editores de imágenes sólo pueden producir un pequeño subconjunto de ellos.

Transparencia de imagen

PNG ofrece una variedad de opciones de transparencia. Con imágenes en color verdadero y en escala de grises, se puede declarar un solo valor de píxel como transparente o se puede agregar un canal alfa (lo que permite utilizar cualquier porcentaje de transparencia parcial). Para imágenes con paleta, se pueden agregar valores alfa a las entradas de la paleta. El número de dichos valores almacenados puede ser menor que el número total de entradas de la paleta, en cuyo caso las entradas restantes se consideran completamente opacas.

Se supone que el escaneo de valores de píxeles para transparencia binaria debe realizarse antes de cualquier reducción de color para evitar que los píxeles se vuelvan transparentes involuntariamente. Es muy probable que esto plantee un problema para los sistemas que pueden decodificar imágenes de 16 bits por canal (como se requiere para cumplir con la especificación) pero solo generan 8 bits por canal (la norma para todos los sistemas excepto los de gama más alta). .

El almacenamiento alfa puede ser "asociado" (" premultiplicado ") o "no asociado", pero PNG está estandarizado [31] en alfa "no asociado" ("no premultiplicado"), lo que significa que las imágenes no están codificadas en alfa ; las emisiones representadas en RGB no son las emisiones a nivel de píxel. Esto significa que la operación excesiva multiplicará las emisiones RGB por alfa y no podrá representar la emisión y la oclusión correctamente.

Compresión

Ejemplo con varios tipos de contenido de imagen.
Representación del costo de bits por píxel para el archivo PNG anterior (rojo=caro, azul=barato)

PNG utiliza un proceso de compresión de 2 etapas:

PNG utiliza DEFLATE , un algoritmo de compresión de datos sin pérdidas no patentado que implica una combinación de codificación LZ77 y Huffman . Las implementaciones DEFLATE con licencia permisiva , como zlib , están ampliamente disponibles.

En comparación con formatos con compresión con pérdida como JPEG, elegir una configuración de compresión superior a la media retrasa el procesamiento, pero a menudo no da como resultado un tamaño de archivo significativamente más pequeño.

Filtración

El método de filtro 0 de PNG puede utilizar los datos de los píxeles A, B y C para predecir el valor de X.
Un PNG con 256 colores, que tiene solo 269 bytes de tamaño con prefiltro. La misma imagen que un GIF sería más de doce veces más grande.

Antes de aplicar DEFLATE, los datos se transforman mediante un método de predicción: se utiliza un único método de filtro para toda la imagen, mientras que para cada línea de la imagen, se elige un tipo de filtro para transformar los datos y hacerlos comprimibles de manera más eficiente. [32] El tipo de filtro utilizado para una línea de exploración se antepone a la línea de exploración para permitir la descompresión en línea.

Sólo hay un método de filtro en la especificación PNG actual (denotado método 0) y, por lo tanto, en la práctica la única opción es qué tipo de filtro aplicar a cada línea. Para este método, el filtro predice el valor de cada píxel en función de los valores de los píxeles vecinos anteriores y resta el color previsto del píxel del valor real, como en DPCM . Una línea de imagen filtrada de esta manera suele ser más comprimible que la línea de imagen sin procesar, especialmente si es similar a la línea anterior, ya que las diferencias con respecto a la predicción generalmente se agruparán alrededor de 0, en lugar de distribuirse entre todos los valores de imagen posibles. Esto es particularmente importante al relacionar filas separadas, ya que DEFLATE no comprende que una imagen es una entidad 2D y, en cambio, simplemente ve los datos de la imagen como un flujo de bytes.

Hay cinco tipos de filtros para el método de filtro 0; cada tipo predice el valor de cada byte (de los datos de la imagen antes del filtrado) en función del byte correspondiente del píxel a la izquierda ( A ), el píxel de arriba ( B ) y el píxel de arriba y a la izquierda ( C ) o alguna combinación de los mismos y codifica la diferencia entre el valor previsto y el valor real. Los filtros se aplican a valores de bytes, no a píxeles; Los valores de píxel pueden ser uno o dos bytes, o varios valores por byte, pero nunca cruzar los límites de los bytes. Los tipos de filtro son: [33]

El filtro Paeth se basa en un algoritmo de Alan W. Paeth . [34] Compárese con la versión de DPCM utilizada en JPEG sin pérdidas y con la transformada de wavelets discreta utilizando ventanas de 1 × 2, 2 × 1 o (para el predictor de Paeth) 2 × 2 y wavelets de Haar .

La compresión se mejora aún más al elegir los tipos de filtro de forma adaptativa línea por línea. Esta mejora, y un método heurístico para implementarla comúnmente utilizado por el software de escritura PNG, fueron creados por Lee Daniel Crocker , quien probó los métodos en muchas imágenes durante la creación del formato; [35] la elección del filtro es un componente de la optimización del tamaño del archivo, como se analiza a continuación.

Si se utiliza entrelazado, cada etapa del entrelazado se filtra por separado, lo que significa que la imagen se puede renderizar progresivamente a medida que se recibe cada etapa; sin embargo, el entrelazado generalmente hace que la compresión sea menos efectiva.

entrelazado

Una ilustración de Adam7 entrelazado sobre una imagen de 16×16

PNG ofrece un esquema de entrelazado bidimensional opcional de 7 pasos : el algoritmo Adam7 . Esto es más sofisticado que el esquema unidimensional de 4 pasos de GIF y permite que una imagen más clara de baja resolución sea visible antes en la transferencia, particularmente si se utilizan algoritmos de interpolación como la interpolación bicúbica . [36]

Sin embargo, el esquema de 7 pasos tiende a reducir la compresibilidad de los datos más que los esquemas más simples.

Animación

Un archivo APNG (PNG animado) (se muestra como imagen estática en algunos navegadores web )

PNG en sí no admite animación. MNG es una extensión de PNG que hace; Fue diseñado por miembros del Grupo PNG. MNG comparte la estructura básica y los fragmentos de PNG, pero es significativamente más complejo y tiene una firma de archivo diferente, lo que automáticamente lo hace incompatible con los decodificadores PNG estándar. Esto significa que la mayoría de los navegadores web y las aplicaciones nunca admitieron MNG o dejaron de admitirlo.

La complejidad de MNG llevó a la propuesta de APNG por parte de los desarrolladores de la Fundación Mozilla. Está basado en PNG, admite animación y es más simple que MNG. APNG ofrece respaldo a la visualización de una sola imagen para decodificadores PNG que no admiten APNG. Hoy en día, el formato APNG es compatible con todos los principales navegadores web. [37] APNG es compatible con Firefox 3.0 y posteriores, Pale Moon (todas las versiones) y Safari 8.0 y posteriores. [38] Chromium 59.0 agregó soporte APNG, [39] [40] seguido de Google Chrome. Opera admitió APNG en las versiones 10 a 12.1, pero la compatibilidad dejó de ser compatible con la versión 15 cuando cambió al motor de renderizado Blink ; Se volvió a agregar soporte en Opera 46 (heredado de Chromium 59). [41] Microsoft Edge ha admitido APNG desde la versión 79.0, cuando cambió a un motor basado en Chromium.

El Grupo PNG decidió en abril de 2007 no adoptar APNG. [42] Se estaban debatiendo varias alternativas, incluidas ANG, aNIM/mPNG, "PNG en GIF" y su subconjunto "RGBA en GIF". [43] Sin embargo, actualmente sólo la APNG cuenta con un apoyo generalizado.

Ejemplos

Se muestra al estilo de los editores hexadecimales , con los valores de bytes del lado izquierdo mostrados en formato hexadecimal y, en el lado derecho, sus caracteres equivalentes de ISO-8859-1 con caracteres de control y no reconocidos reemplazados por puntos. Además, la firma PNG y los fragmentos individuales están marcados con colores. Tenga en cuenta que son fáciles de identificar debido a sus nombres de tipo legibles por humanos (en este ejemplo, PNG, IHDR, IDAT e IEND).

Ventajas

Razones para utilizar esta Norma Internacional:

Comparación con otros formatos de archivo

Formato de intercambio de gráficos (GIF)

Las imágenes PNG son menos compatibles con los navegadores más antiguos. En particular, IE6 tiene soporte limitado para PNG. [47]

JPEG

Imagen compuesta que compara la compresión con pérdida en JPEG con la compresión sin pérdida en PNG: los artefactos JPEG pueden ser fácilmente visibles en el fondo de este tipo de datos de imagen, donde la imagen PNG tiene un color sólido.

El formato JPEG (Joint Photographic Experts Group) puede producir un archivo más pequeño que PNG para imágenes fotográficas (y similares a fotografías), ya que JPEG utiliza un método de codificación con pérdida diseñado específicamente para datos de imágenes fotográficas, que generalmente están dominados por archivos suaves y de bajo contraste. transiciones y una cantidad de ruido o estructuras irregulares similares. El uso de PNG en lugar de JPEG de alta calidad para este tipo de imágenes daría como resultado un gran aumento del tamaño del archivo con una ganancia insignificante en la calidad. En comparación, al almacenar imágenes que contienen texto, arte lineal o gráficos (imágenes con transiciones nítidas y grandes áreas de color sólido), el formato PNG puede comprimir datos de imagen más que JPEG. Además, PNG no tiene pérdidas, mientras que JPEG produce artefactos visuales alrededor de áreas de alto contraste. (Dichos artefactos dependen de la configuración utilizada en la compresión JPG; pueden ser bastante perceptibles cuando se utiliza una configuración de baja calidad [alta compresión].) Cuando una imagen contiene transiciones nítidas y partes fotográficas, se debe elegir entre los dos efectos. JPEG no admite transparencia.

La compresión con pérdida de JPEG también sufre una pérdida de generación , donde decodificar y recodificar repetidamente una imagen para guardarla nuevamente provoca una pérdida de información cada vez, degradando la imagen. Debido a que PNG no tiene pérdidas, es adecuado para almacenar imágenes que se van a editar. Si bien PNG es razonablemente eficiente al comprimir imágenes fotográficas, existen formatos de compresión sin pérdidas diseñados específicamente para imágenes fotográficas, WebP sin pérdidas y Adobe DNG (negativo digital), por ejemplo. Sin embargo, estos formatos no son ampliamente compatibles o son propietarios. Una imagen se puede almacenar sin pérdidas y convertirla al formato JPEG sólo para su distribución, de modo que no haya pérdida de generación.

Si bien la especificación PNG no incluye explícitamente un estándar para incrustar datos de imágenes Exif de fuentes como cámaras digitales, el método preferido para incrustar datos EXIF ​​en un PNG es utilizar la etiqueta de fragmento auxiliar no crítico eXIf. [48]

Los primeros navegadores web no admitían imágenes PNG; JPEG y GIF fueron los principales formatos de imagen. JPEG se usaba comúnmente al exportar imágenes que contenían degradados para páginas web, debido a la profundidad de color limitada del GIF. Sin embargo, la compresión JPEG hace que el degradado se desenfoque ligeramente. Un formato PNG reproduce un degradado con la mayor precisión posible para una profundidad de bits determinada, manteniendo el tamaño del archivo pequeño. PNG se convirtió en la opción óptima para imágenes con pequeños degradados a medida que mejoró la compatibilidad del navegador web con el formato. No se necesita ninguna imagen para mostrar degradados en los navegadores modernos, ya que los degradados se pueden crear usando CSS .

JPEG-LS

JPEG-LS es un formato de imagen del Joint Photographic Experts Group , aunque mucho menos conocido y soportado que el otro formato JPEG con pérdida mencionado anteriormente. Es directamente comparable con PNG, [ se necesita aclaración ] y tiene un conjunto estándar de imágenes de prueba. [49] En Waterloo Repertoire ColorSet, un conjunto estándar de imágenes de prueba (no relacionado con el conjunto de pruebas de conformidad JPEG-LS), JPEG-LS generalmente funciona mejor que PNG, entre un 10% y un 15%, pero en algunas imágenes PNG funciona sustancialmente mejor. , del orden del 50 al 75%. [50] Por lo tanto, si ambos formatos son opciones y el tamaño del archivo es un criterio importante, ambos deben considerarse, dependiendo de la imagen.

PELEA

El formato de archivo de imagen de etiqueta (TIFF) es un formato que incorpora una gama extremadamente amplia de opciones. Si bien esto hace que TIFF sea útil como formato genérico para el intercambio entre aplicaciones profesionales de edición de imágenes, hace que agregar soporte a las aplicaciones sea una tarea mucho mayor y, por lo tanto, tiene poco soporte en aplicaciones que no se ocupan de la manipulación de imágenes (como los navegadores web). El alto nivel de extensibilidad también significa que la mayoría de las aplicaciones proporcionan sólo un subconjunto de características posibles, lo que potencialmente crea confusión en el usuario y problemas de compatibilidad.

El algoritmo de compresión sin pérdidas de uso general más común utilizado con TIFF es Lempel-Ziv-Welch (LZW). Esta técnica de compresión, también utilizada en GIF, estuvo cubierta por patentes hasta 2003. TIFF también admite el algoritmo de compresión que utiliza PNG (es decir, Etiqueta de compresión 0008 16 ' estilo Adobe ') con uso medio y soporte por parte de las aplicaciones. TIFF también ofrece algoritmos de compresión sin pérdidas para fines especiales como CCITT Group IV , que puede comprimir imágenes de dos niveles (por ejemplo, faxes o texto en blanco y negro) mejor que el algoritmo de compresión de PNG.

PNG solo admite alfa no premultiplicado [31], mientras que TIFF también admite alfa "asociado" (premultiplicado).

Soporte de software

La implementación de referencia oficial del formato PNG es la biblioteca de programación libpng . [51] Se publica como software libre bajo los términos de una licencia de software libre permisiva . Por lo tanto, suele encontrarse como una biblioteca de sistema importante en los sistemas operativos gratuitos.

Soporte del editor de gráficos de mapa de bits para PNG

El formato PNG es ampliamente compatible con programas gráficos, incluidos Adobe Photoshop , Corel 's Photo-Paint y Paint Shop Pro , GIMP , GraphicConverter , Helicon Filter , ImageMagick , Inkscape , IrfanView , Pixel image editor, Paint.NET y Xara Photo &. Diseñador Gráfico y muchos otros (incluidas plataformas de diseño gráfico online como Canva ). Algunos programas incluidos con sistemas operativos populares que admiten PNG incluyen Paint de Microsoft y Photos / iPhoto and Preview de Apple , y GIMP también suele venir incluido con distribuciones populares de Linux .

Adobe Fireworks (anteriormente de Macromedia ) utiliza PNG como formato de archivo nativo, lo que permite que otros editores de imágenes y utilidades de vista previa vean la imagen aplanada. Sin embargo, Fireworks de forma predeterminada también almacena metadatos para capas, animaciones, datos vectoriales, texto y efectos. Estos archivos no deben distribuirse directamente. En cambio, Fireworks puede exportar la imagen como un PNG optimizado sin metadatos adicionales para usar en páginas web, etc. [ cita necesaria ]

Compatibilidad del navegador web con PNG

La compatibilidad con PNG apareció por primera vez en 1997, en Internet Explorer 4.0b1 (32 bits sólo para NT) y en Netscape 4.04. [52]

A pesar de los llamamientos de la Free Software Foundation [53] y el World Wide Web Consortium (W3C), [54] herramientas como gif2png, [55] y campañas como Burn All GIFs, [56] la adopción de PNG en los sitios web fue bastante lenta debido a soporte tardío y con errores en Internet Explorer, particularmente en lo que respecta a la transparencia. [57]

Los navegadores compatibles con PNG incluyen: Apple Safari , Google Chrome , Mozilla Firefox , Opera , Camino , Internet Explorer , Microsoft Edge y muchos otros. Para obtener una comparación completa, consulte Comparación de navegadores web (soporte de formato de imagen) .

Especialmente las versiones de Internet Explorer (Windows) inferiores a 9.0 (lanzadas en 2011) tenían numerosos problemas que impedían representar correctamente las imágenes PNG. [58]

Soporte del sistema operativo para iconos PNG

Los iconos PNG han sido compatibles con la mayoría de las distribuciones de Linux desde al menos 1999, en entornos de escritorio como GNOME . [70] En 2006, se introdujo en Windows Vista el soporte de Microsoft Windows para iconos PNG . [71] Los iconos PNG también son compatibles con AmigaOS 4 , AROS , macOS , iOS y MorphOS . Además, Android hace un uso extensivo de archivos PNG.

Software de optimización y tamaño de archivos

El tamaño del archivo PNG puede variar significativamente dependiendo de cómo esté codificado y comprimido; Esto se analiza y se brindan una serie de consejos en PNG: La guía definitiva. [50]

Comparado con GIF

En comparación con los archivos GIF , un archivo PNG con la misma información (256 colores, sin fragmentos ni metadatos auxiliares), comprimido por un compresor eficaz, normalmente es más pequeño que una imagen GIF. Dependiendo del archivo y del compresor, PNG puede variar desde algo más pequeño (10 %) hasta significativamente más pequeño (50 %) y algo más grande (5 %), pero rara vez es significativamente más grande [50] para imágenes grandes. Esto se atribuye al rendimiento de DEFLATE de PNG en comparación con LZW de GIF , y a que la capa de precompresión agregada de los filtros predictivos de PNG tiene en cuenta la estructura de imagen bidimensional para comprimir aún más los archivos; Como los datos filtrados codifican diferencias entre píxeles, tenderán a agruparse más cerca de 0, en lugar de distribuirse entre todos los valores posibles y, por lo tanto, DEFLATE los comprimirá más fácilmente. Sin embargo, algunas versiones de Adobe Photoshop , CorelDRAW y MS Paint proporcionan una compresión PNG deficiente, lo que crea la impresión de que GIF es más eficiente. [50]

Factores de tamaño de archivo

Los archivos PNG varían en tamaño debido a varios factores:

profundidad del color
La profundidad de color puede variar de 1 a 64 bits por píxel.
trozos auxiliares
PNG admite metadatos; esto puede resultar útil para editar, pero innecesario para visualizar, como en los sitios web.
entrelazando
Como cada paso del algoritmo Adam7 se filtra por separado, esto puede aumentar el tamaño del archivo. [50]
filtrar
Como etapa de precompresión, cada línea es filtrada por un filtro predictivo, que puede cambiar de una línea a otra. Como el paso final DEFLATE opera en todos los datos filtrados de la imagen, no se puede optimizar esta fila por fila; Por tanto, la elección del filtro para cada fila es potencialmente muy variable, aunque existen heurísticas. [nota 1]
compresión
Con cálculos adicionales, los compresores DEFLATE pueden producir archivos más pequeños.

Por lo tanto, existe un equilibrio de tamaño entre una alta profundidad de color, metadatos máximos (incluida la información del espacio de color, junto con información que no afecta la visualización), entrelazado y velocidad de compresión, lo que produce archivos grandes, con menor profundidad de color, menos o sin fragmentos auxiliares, sin entrelazado y filtrado y compresión ajustados pero computacionalmente intensivos. Para diferentes propósitos, se eligen diferentes compensaciones: un archivo máximo puede ser mejor para archivar y editar, mientras que un archivo simplificado puede ser mejor para usar en un sitio web, y de manera similar, se prefiere una compresión rápida pero deficiente al editar y guardar repetidamente un archivo. archivo, mientras que se prefiere una compresión lenta pero alta cuando un archivo es estable: al archivarlo o publicarlo. El entrelazado es una compensación: acelera drásticamente la renderización temprana de archivos grandes (mejora la latencia), pero puede aumentar el tamaño del archivo (disminuye el rendimiento) con poca ganancia, particularmente para archivos pequeños. [50]

Compresión PNG con pérdida

Aunque PNG es un formato sin pérdidas, los codificadores PNG pueden preprocesar los datos de la imagen con pérdida para mejorar la compresión PNG. Por ejemplo, cuantificar un PNG de color verdadero a 256 colores permite utilizar el tipo de color indexado para una posible reducción del tamaño del archivo. [72]

Software de edición de imágenes

Algunos programas son más eficientes que otros al guardar archivos PNG, esto se relaciona con la implementación de la compresión PNG utilizada por el programa.

Muchos programas de gráficos (como el software Preview de Apple ) guardan archivos PNG con grandes cantidades de metadatos y datos de corrección de color que generalmente son innecesarios para la visualización en la Web . Los archivos PNG no optimizados de Adobe Fireworks también son conocidos por esto, ya que contienen opciones para hacer que la imagen sea editable en editores compatibles. Además, CorelDRAW (al menos la versión 11) a veces produce archivos PNG que Internet Explorer (versiones 6 a 8) no pueden abrir.

El rendimiento de Adobe Photoshop en archivos PNG ha mejorado en CS Suite cuando se utiliza la función Guardar para Web (que también permite el uso explícito de PNG/8).

Fireworks de Adobe guarda archivos PNG más grandes que muchos programas de forma predeterminada. Esto se debe a la mecánica de su formato Guardar : las imágenes producidas por la función de guardar de Fireworks incluyen fragmentos grandes y privados que contienen información completa de capas y vectores. Esto permite una mayor edición sin pérdidas. Cuando se guardan con la opción Exportar , los PNG de Fireworks son competitivos con los producidos por otros editores de imágenes, pero ya no se pueden editar como nada más que mapas de bits aplanados. Fireworks no puede guardar archivos PNG editables con vectores de tamaño optimizado.

Otros ejemplos notables de compresores PNG deficientes incluyen:

Una compresión deficiente aumenta el tamaño del archivo PNG pero no afecta la calidad de la imagen ni la compatibilidad del archivo con otros programas.

Cuando la profundidad de color de una imagen en color verdadero se reduce a una paleta de 8 bits (como en GIF), los datos de la imagen resultante suelen ser mucho más pequeños. Por lo tanto, un PNG de color verdadero suele ser más grande que un GIF con color reducido, aunque PNG podría almacenar la versión con color reducido como un archivo paletizado de tamaño comparable. Por el contrario, algunas herramientas, al guardar imágenes como PNG, las guardan automáticamente como color verdadero, incluso si los datos originales usan solo color de 8 bits, lo que infla el archivo innecesariamente. [50] Ambos factores pueden llevar a la idea errónea de que los archivos PNG son más grandes que los archivos GIF equivalentes.

Herramientas de optimización

Hay varias herramientas disponibles para optimizar archivos PNG; lo hacen mediante:

Lista de herramientas

A continuación se enumera una comparación simple de sus características.

Antes de que zopflipng estuviera disponible, una buena forma en la práctica de realizar una optimización png es usar una combinación de 2 herramientas en secuencia para una compresión óptima: una que optimiza los filtros (y elimina fragmentos auxiliares) y otra que optimiza DEFLATE. Aunque pngout ofrece ambos, solo se puede especificar un tipo de filtro en una sola ejecución, por lo tanto, se puede usar con una herramienta contenedora o en combinación con pngcrush , [nota 2] que actúa como un re-desinflador, como advdef.

Eliminación de trozos auxiliares

Para eliminar fragmentos auxiliares, la mayoría de las herramientas de optimización de PNG tienen la capacidad de eliminar todos los datos de corrección de color de los archivos PNG (gamma, balance de blancos, perfil de color ICC, perfil de color RGB estándar). Esto a menudo da como resultado archivos de tamaño mucho más pequeño. Por ejemplo, las siguientes opciones de línea de comando logran esto con pngcrush:

pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB InputFile.png OutputFile.png

Optimización del filtro

pngcrush, pngout y zopflipng ofrecen opciones aplicando uno de los tipos de filtro 0 a 4 globalmente (usando el mismo tipo de filtro para todas las líneas) o con un "pseudo filtro" (numerado 5), que para cada línea elige uno de los filtros. tipos 0–4 utilizando un algoritmo adaptativo. Zopflipng ofrece 3 métodos adaptativos diferentes, incluida una búsqueda de fuerza bruta que intenta optimizar el filtrado. [nota 7]

pngout y zopflipng brindan una opción para preservar/reutilizar [nota 2] [nota 8] el conjunto de filtros línea por línea presente en la imagen de entrada.

pngcrush y zopflipng brindan opciones para probar diferentes estrategias de filtrado en una sola ejecución y elegir la mejor. La versión gratuita de línea de comandos de pngout no ofrece esto, pero la versión comercial, pngoutwin, sí lo ofrece. [nota 9]

Optimización DESINFLAR

Zopfli y LZMA SDK proporcionan implementaciones DEFLATE que pueden producir relaciones de compresión más altas que la implementación de referencia zlib a costa del rendimiento. AdvanceCOMP advpngy advdefpuede utilizar cualquiera de estas bibliotecas para volver a comprimir archivos PNG. Además, PNGOUT contiene su propia implementación DEFLATE.

advpngno tiene una opción para aplicar filtros y siempre usa el filtro 0 globalmente (dejando los datos de la imagen sin filtrar); por lo tanto, no debe utilizarse cuando la imagen se beneficie significativamente del filtrado. Por el contrario, advdefel mismo paquete no se ocupa de la estructura PNG y actúa sólo como un re-desinflador, conservando cualquier configuración de filtro existente.

Optimización de iconos

Dado que los iconos destinados a Windows Vista y versiones posteriores pueden contener subimágenes PNG, las optimizaciones también se pueden aplicar a ellos. Al menos un editor de iconos , Pixelformer, es capaz de realizar una pasada de optimización especial mientras guarda archivos ICO , reduciendo así su tamaño. FileOptimizer (mencionado anteriormente) también puede manejar archivos ICO.

Los íconos para macOS también pueden contener subimágenes PNG, pero no existe dicha herramienta disponible. [ cita necesaria ]

Ver también

Notas explicatorias

  1. ^ El filtrado se utiliza para aumentar la similitud con los datos y, por lo tanto, aumentar la relación de compresión. Sin embargo, teóricamente no existe una fórmula para la similitud, ni una relación absoluta entre la similitud y el compresor, por lo que, a menos que se realice la compresión, no se puede decir que un conjunto de filtros es mejor que otro.
  2. ^ abcd Utilice pngout -f6 para reutilizar el conjunto de filtros anterior
  3. ^ Las herramientas que ofrecen esta característica podrían actuar como un puro re-desinflador de archivos PNG.
  4. ^ zlib , la implementación deflate de referencia, la compresión no es óptima incluso en el nivel máximo. Ver Zopfli , formato zip en 7-zip y pngout .
  5. ^ Advpng no solo no admite la reducción de color, sino que también falla en imágenes con un espacio de color reducido.
  6. ^ Advpng solo puede aplicar el filtro 0 globalmente, por lo que no es ni sí ni no, sino N/A.
  7. ^ [pngcrush|pngout] -f O zopflipng --filtros
  8. ^ zopflipng --filtros=p
  9. ^ El cuadro de diálogo de configuración de optimización de Pngoutwin ofrece al usuario una selección de estrategias de filtrado.

Referencias

  1. ^ abc "ISO/IEC 15948:2004 - Tecnología de la información - Gráficos por computadora y procesamiento de imágenes - Gráficos de red portátiles (PNG): especificación funcional". Organización Internacional de Normalización . 3 de marzo de 2004 . Consultado el 19 de febrero de 2011 .
  2. ^ ab Roelofs, Greg (29 de mayo de 2010). "Historia de PNG". libpng . Consultado el 20 de octubre de 2010 .
  3. ^ W3C 2003, 1 alcance.
  4. ^ "Definición de sustantivo PNG del Oxford Advanced Learner's Dictionary". Diccionarios para estudiantes de Oxford . Consultado el 21 de enero de 2018 .
  5. ^ "Descripción del archivo .PNG de gráfico de red portátil". surferhelp.goldensoftware.com . Consultado el 12 de agosto de 2022 .
  6. ^ Roelofs, Greg. "Revisión web: ¡PNG NO ES GIF!". gente.apache.org . Consultado el 24 de noviembre de 2021 .
  7. ^ T. Boutell; et al. (Marzo de 1997). Especificación PNG (gráficos de red portátiles) versión 1.0. IESG . segundo. 3.doi : 10.17487 /RFC2083 . RFC 2083.
  8. ^ "Registro de nueva imagen de tipo de medio/png". IANA . 27 de julio de 1996.
  9. ^ Limer, Eric (30 de octubre de 2019). "El GIF ha muerto. Viva el GIF". Mecánica Popular . Consultado el 21 de noviembre de 2022 .
  10. ^ Roelofs 1999, Capítulo 7. Historia del formato de gráficos de red portátiles.
  11. ^ abcd W3C 2003, 11.2.2 Encabezado de imagen IHDR
  12. ^ Roelofs, Greg (29 de septiembre de 2011). "Especificación y extensiones de gráficos de red portátiles (PNG)". libpng . Consultado el 15 de agosto de 2021 .
  13. ^ Boutell, T. (1 de octubre de 1996). Especificación PNG (gráficos de red portátiles) 1.0. W3C . segundo. 8.4. doi : 10.17487/RFC2083 . RFC 2083. PNG en sí es estrictamente un formato de imagen única. (...) En el futuro se podrá definir un formato de múltiples imágenes basado en PNG. Dicho formato se considerará un formato de archivo independiente.
  14. ^ Boutell, Thomas (1 de octubre de 1996). Especificación PNG (gráficos de red portátiles) 1.0. doi : 10.17487/RFC2083 . RFC 2083.
  15. ^ W3C 2003, firma 5.2 PNG.
  16. ^ W3C 2003, diseño de fragmentos 5.3.
  17. ^ ab Laphroaig, Manul (31 de octubre de 2017). PoC o GTFO. Sin prensa de almidón. ISBN 9781593278984. Cada fragmento consta de cuatro partes: longitud, tipo de fragmento, datos del fragmento y CRC de 32 bits. La longitud es un entero sin signo de 32 bits que indica el tamaño únicamente del campo Datos fragmentados.
  18. ^ Laphroaig, Manul (31 de octubre de 2017). PoC o GTFO. Sin prensa de almidón. ISBN 9781593278984. El tipo de fragmento es un código FourCC de 32 bits, como IHDR, IDAT o IEND.
  19. ^ W3C 2003, 11.2.4 Datos de imagen IDAT.
  20. ^ W3C 2003, 11.2.5 IEND Tráiler de imagen.
  21. ^ W3C 2003, 11.3.3.3 Perfil ICC integrado iCCP.
  22. ^ Thomas Kopp (17 de abril de 2008). "Firmas digitales PNG: especificación de extensión".
  23. ^ "Extensiones a la especificación PNG 1.2, versión 1.5.0". ftp-osl.osuosl.org .
  24. ^ W3C 2003, 11.3.3.2 gAMA Gamma de imagen.
  25. ^ W3C 2003, 11.3.5.3 pHY Dimensiones físicas de píxeles.
  26. ^ W3C 2003, 11.3.3.4 sBIT Bits significativos.
  27. ^ "Especificación PNG (gráficos de red portátiles) \ Versión 1.0". w3.org . Consultado el 30 de mayo de 2022 .4.2.6. sBIT Bits significativos, 13 bytes en total; los tipos de color 2 y 3 totalizaron 6 bytes
  28. ^ Roelofs 2003, Bits significativos (sBIT) "Las imágenes en escala de grises son las más simples; sBIT contiene un solo byte que indica el número de bits significativos en los datos de origen"
  29. ^ "Especificación PNG: Especificaciones de fragmentos".
  30. ^ "Noticias PNG de 2006". Libpng.org.
  31. ^ ab "Especificación PNG: Justificación". w3.org .
  32. ^ W3C 2003, 9 Filtrado.
  33. ^ "Algoritmos de filtrado". Especificación PNG .
  34. ^ Paeth, Alan W. (1991). Arvo, James (ed.). "Compresión de archivos de imágenes simplificada". Gemas gráficas 2 . Prensa académica, San Diego: 93–100. doi :10.1016/B978-0-08-050754-5.50029-3. ISBN 0-12-064480-0. Icono de acceso cerrado
  35. ^ Crocker, Lee Daniel (julio de 1995). "PNG: el formato gráfico de red portátil". Diario del Dr. Dobb . 20 (232): 36–44.
  36. ^ "Introducción a PNG". nuwen.net . Consultado el 20 de octubre de 2010 .
  37. ^ "¿Puedo usar... tablas de soporte para HTML5, CSS3, etc.?". caniuse.com . Consultado el 6 de febrero de 2021 .
  38. ^ "iOS 8 y iPhone 6 para desarrolladores y diseñadores web: próxima evolución para Safari y aplicaciones web nativas". mobilexweb.com. 17 de septiembre de 2014 . Consultado el 24 de septiembre de 2014 .
  39. ^ scroggo (14 de marzo de 2017). "cromo / cromo / src / 7d2b8c45afc9c0230410011293cc2e1dbb8943a7". cromo.googlesource.com . Consultado el 31 de marzo de 2017 .
  40. ^ cromo-cron; et al. (27 de marzo de 2017). "cromo / cromo / src / 59.0.3047.0..59.0.3053.0". cromo.googlesource.com . Consultado el 31 de marzo de 2017 .
  41. ^ "Dev.Opera: novedades de Chromium 59 y Opera 46". dev.opera.com . Consultado el 11 de septiembre de 2022 .
  42. ^ "Votación fallida: APNG 20070405a". 20 de abril de 2007. Archivado desde el original el 3 de febrero de 2008.
  43. ^ "Comparación de propuestas de animación de PNG Group + software de prueba". xs4all.nl . Archivado desde el original el 24 de enero de 2009.
  44. ^ abc Deutsch, L. Peter; Gailly, Jean-Loup (mayo de 1996). "rfc1950". Rastreador de datos del IETF . Consultado el 18 de agosto de 2021 .
  45. ^ Deutsch, L. Peter (mayo de 1996). "rfc1951". Rastreador de datos del IETF . Consultado el 18 de agosto de 2021 .
  46. ^ "Una introducción básica a las funciones de PNG". Libpng.org . Consultado el 20 de octubre de 2010 .
  47. ^ "GIF, PNG, JPG. ¿Cuál usar?". Sitepoint.com. 3 de agosto de 2009 . Consultado el 20 de octubre de 2010 .
  48. ^ "Extensiones a la especificación PNG 1.2, versión 1.5.0" . Consultado el 5 de mayo de 2020 .
  49. ^ "T.87: compresión sin pérdidas o casi sin pérdidas de imágenes fijas de tonos continuos: línea de base". Unión Internacional de Telecomunicaciones . Consultado el 20 de marzo de 2011 .
  50. ^ abcdefg Roelofs 2003, Capítulo 9. Compresión y filtrado
  51. ^ "libpng" . Consultado el 13 de julio de 2013 .
  52. ^ "Uso de imágenes PNG para mostrar datos". Centro de Ciencias del Agua de Oregón. 16 de febrero de 2006.
  53. ^ "Por qué no hay archivos GIF en las páginas web de GNU". Sistema Operativo GNU . 16 de diciembre de 2008.
  54. ^ "Hoja informativa de PNG". Consorcio Mundial de la red . 7 de octubre de 1996.
  55. ^ "Página de recursos para gif2png 2.5.11". catb.org .
  56. ^ "Grabar todos los GIF". burnallgifs.org .
  57. ^ "Transparencia PNG en Internet Explorer". Revista PC . 5 de octubre de 2004.
  58. ^ abcd "Navegadores compatibles con PNG". 14 de marzo de 2009.
  59. ^ "El Explorador de Windows falla cuando hago clic en un archivo PNG de Fireworks para verlo". Sistemas Adobe . 5 de junio de 2007.
  60. ^ "No se pueden ver imágenes .png con Internet Explorer 4.0". Base de conocimientos de Microsoft .
  61. ^ "Los PNG que están dentro de una etiqueta de objeto se imprimen como una imagen negativa". Base de conocimientos de Microsoft .
  62. ^ "Las imágenes PNG se imprimen incorrectamente en Internet Explorer 5.01". Base de conocimientos de Microsoft .
  63. ^ "No puedes ver algunas imágenes PNG en Internet Explorer 6". Base de conocimientos de Microsoft .
  64. ^ "No puede utilizar Internet Explorer 6 para abrir un archivo PNG que contenga uno o más fragmentos IDAT de longitud cero". Base de conocimientos de Microsoft .
  65. ^ "Preguntas frecuentes sobre PNG".
  66. ^ "Doctorado: Los gráficos de red portátiles pierden transparencia en el navegador web". Base de conocimientos de Microsoft .
  67. ^ "Los archivos PNG no muestran transparencia en Internet Explorer". Base de conocimientos de Microsoft .
  68. ^ Lovitt, Michael (21 de diciembre de 2002). "Opacidad variable entre navegadores con PNG: una solución real". Una lista aparte . Archivado desde el original el 18 de agosto de 2011 . Consultado el 21 de julio de 2009 .
  69. ^ "IE7 alfa transparente PNG + opacidad". Canal 9 . Archivado desde el original el 27 de agosto de 2011 . Consultado el 23 de enero de 2009 .
  70. ^ Fulbright, Michael (1999). "Hoja de ruta de la biblioteca GNOME 1.0". Archivado desde el original el 30 de enero de 2010 . Consultado el 19 de diciembre de 2007 .
  71. ^ "Windows Vista: iconos". OUno . 2007. Archivado desde el original el 11 de noviembre de 2007 . Consultado el 12 de noviembre de 2007 .
  72. ^ "PNG puede ser un formato con pérdida". Pngmini.com . Consultado el 1 de febrero de 2014 .

Otras lecturas

enlaces externos