Siguiendo con otros formatos para poder tener imágenes, ahora toca uno que no pega mucho con la fotografía, dado que no es el más apropiado, pero que lo mismo alguna vez nos puede sacar de un apuro. Hablamos del PNG.
Como siempre, veamos que nos dice la
Wikipedia:PNG (Portable Network Graphics) es un formato gráfico basado en un algoritmo de compresión sin pérdida para bitmaps no sujeto a patentes. Este formato fue desarrollado en buena parte para solventar las deficiencias del formato GIF y permite almacenar imágenes con una mayor profundidad de contraste y otros importantes datos.
Es decir, que hace lo mismo que otras cosas, pero que no está sujeto a patentes, muy acorde con nuestra filosofía
.
Ahora toca un poco mirarle las tripas a ver que tiene dentro.
Un PNG tiene una cabecera y dos secciones de metadatos (Buano, la cabecera esstá incluida en la primera sección de metadatos). La cabecera informa más al sistema sobre lo que es, y en las secciones de metadatos están la información de la imagen en si. La primera sección son campos todos obligatorios y la segunda son opcionales. Podemos guardar información tipo:
Secciones esenciales
Un decodificador debe ser capaz de entender estas secciones para leer y renderizar un PNG:
* IHDR, debe ser la primera sección, contiene la cabecera.
* PLTE, contiene la paleta (lista de colores).
* IDAT, contiene la imagen que debe ser dividida en múltiples secciones IDAT, haciendo esto se incrementa el tamaño de la imagen ligeramente pero hace posible generar imágenes PNG en streaming.
* IEND, marca el final de la imagen.
Secciones de metadatos
Otros atributos que pueden ser guardados en una imagen PNG son: valores de gamma, color del fondo e información textual. PNG también soporta corrección de color con el uso de sistemas de manejo del color como sRGB.
* bKGD, contiene el color de fondo por defecto, se usa cuando no hay un mejor color disponible para mostrar, como en un visor de imágenes pero no en un navegador web.
* cHRM, balance de blanco.
* gAMA, especifica la gamma.
* hIST, guarda el histograma o cantidad total de cada color en la imagen.
* iCCP, perfil ICC de color.
* iTXt, contiene texto (UTF-8) comprimido o no.
* pHYs, contiene el tamaño previsto del pixel y/o el ratio de la imagen.
* sBIT, (bits significativos) indican la exactitud de los colores en la imagen.
* sPLT, sugiere una paleta para usar en caso de que el rango completo de colores no este disponible.
* sRGB, indica que se usa el estandar sRBG color space.
* tEXt, almacena texto que puede ser representado en ISO 8859-1 con un nombre=valor para cada sección.
* tIME, almacena la fecha de la última modificación.
* tRNS, contiene información sobre la transparencia. Para imágenes indexadas almacena el canal alpha para una o más paletas, para imágenes en color real y escala de grises almacena la información de un solo pixel que debe ser considerado completamente transparente.
* zTXt, contiene texto comprimido con los mismos límites que tEXt.
Como vemos, tenemos una cantidad importante de información en la cabecera de archivo, que va indicando qué es cada cosa.
¿Como se guardan los datos?
* Escala de grises (1 canal)
* Escala de grises y canal alfa (2 canales)
* Canales rojo, verde y azul (RGB, 3 canales. También llamado color verdadero o Truecolor)
* Canales rojo, verde, azul y alfa (RGB + alfa, 4 canales)
Es decir, tenemos dos opciones: escala de grises y RGB, y en ambos casos podemos agregar un canal alfa.
Si tenemos RGB, la compresión no reduce tanto el tamaño y todo eso ¿Cuando usar PNG?
Sencillo, en PNG tenemos RGBA que es la opción de RGB con canal alfa, lo que nos da la opción de trasnparencias, tampoco da el sombreado que a veces genera un JPG para evitar el aliasing y parece qeu va mejor con degradados. Bueno, y también que no pierdes información al comprimir. Aparte, las imagenes en PNG van cargando por partes a imagen completa. Es decir, en vez de ir cargando la imagend e arriba a abajo como el JPG, lo hace en cuatro pasadas (si, el JPG ahroa a veces también lo hace) y lo hace de una forma más eficiente que el GIF. Un ejemplod e la página oficial de PNG, realizado por
Willem van Schaik:Izquierda PNG y a la derecha GIF
Paradojico, pero para demostrar que PNG es mejor que GIF, usan un GIF
Eso se debe a que PNG no admite animaciones, para eso tenemos dos formatos emaprentados con él:
MNG y
APNG. El problema es que no están soportados por mucho navegadores (por ejemplo, safari de MAC no soporta MNG). Han solucionado aprte del problema con APNG, la primera parte del fichero es un PNG normal, por lo que si el navegador no soporta ese tipo de animación. al menos tienes una imagen estática. De todas formas, y lo he vivido en carne propia, Microsoft no se lleva bien con PNG y más de una vez he tenido que "apañar" algún PNG para que se viera correctamente en un explorer.
Bueno, creo que va bastante, si teneis más dudas preguntarme y si puedo las contesto.
Una ultima paradoja de la
página oficial de PNG:
Q: Why is the PNG-logo graphic linked to a JPEG image?
A: If there's one concept you should take away from this site, it's Use the best tool for the job. In this case, that happens to be JPEG, which, at 76,563 bytes, is almost seven times smaller than the completely lossless PNG version (515,894 bytes). (Of course, the PNG image is interlaced, which tends to reduce its compression efficiency; non-interlaced, it would be 410,545 bytes, only 5.4 times as large as the JPEG. By contrast, progressive JPEG--which corresponds to PNG interlacing--tends to shrink normal JPEGs, in this case to 71,110 bytes).
Si, el logo de PNG es tá en JPG
Paradojas de la vida. Bueno, realmente es coherencia, ellos mismos dicen que hay que utilizar al mejor herramienta para cada caso
Como curiosidad, el algoritmo de compresión patentado que usa GIF es el
LZW, que es justamente el algoritmo de compresión sin perdida que usa TIFF.
¿Me dejo algo?
Aqui lo dejo para que sea juzgado por el consejo de sabios.