Colección de citas famosas - Libros antiguos - Especificación de gráficos de red portátiles (PNG) (segunda edición)

Especificación de gráficos de red portátiles (PNG) (segunda edición)

Recomendado oficialmente por el W3C el 10 de noviembre de 2003.

Versión actual: orden de bytes de trabajo).

Los procesadores X86 y ARM comúnmente utilizados por los hosts actuales están en modo little-endian, lo que se denomina orden de bytes del host.

PNG utiliza el orden de bytes de la red.

Las imágenes normales en color verdadero se componen de al menos tres canales: rojo, verde y azul, lo que significa que cada píxel ocupa más de tres bytes de espacio. De esta forma, la eficacia de compresión de la imagen es muy baja.

Por lo tanto, creamos una paleta y preestablecemos los colores que necesitamos usar en la paleta. Cuando la usemos más adelante, solo necesitamos proporcionar la posición del índice de la paleta.

Y para evitar que la paleta ocupe demasiado espacio, configuramos la capacidad de la paleta en 256. La posición del índice no excederá 256 y solo se necesita un byte para representarlo. Un byte solo ocupa un canal, por lo que en el modo de índice, solo hay un canal.

Una imagen se compone de muchos píxeles y puede considerarse como una matriz bidimensional. Podemos extraer varias posiciones especiales, como extraer un píxel de cada dos filas horizontales y extraer un píxel de cada dos columnas verticales. Esto forma una nueva matriz bidimensional, que puede representar la imagen original con una distorsión simplificada. Este método de extracción se llama extracción de pase. Los datos formados después de la extracción se entrelazan y cada segmento puede contener una miniatura de la imagen completa. La simple recombinación puede producir una imagen completa, incluso si no hay datos completos, solo una parte puede obtener una miniatura. Es una forma de acelerar la transmisión de imágenes en la transmisión de red, pero ahora que la velocidad de la red es muy rápida, es casi inútil.

El área media del mapa de color es blanca, que se llama punto blanco y es un parámetro del mapa de color. Otro parámetro es la base, que se utiliza como traducción del mapa de colores.

Podemos establecer las coordenadas del punto blanco para cambiar el área blanca central y desplazarla hacia rojo, verde y azul para ajustar el grado de cambio en el mapa de colores.

La especificación PNG no especifica una interfaz de aplicación, pero cubre cuatro tipos de imágenes: imágenes originales, imágenes estándar, imágenes PNG e imágenes entregadas. La relación es la siguiente:

El número de bits ocupados por la codificación binaria es la profundidad de la muestra.

PNG tiene tres formas de gestionar el espacio de color: usando la configuración ICC, usando la configuración sRGB y usando la referencia de croma y la configuración de posición del punto blanco.

La configuración ICC es más flexible y fácil de adaptar; la configuración sRGB requiere establecer un espacio de color específico y puede ocupar más capacidad, esta última es más precisa; También se recomienda que los dos primeros utilicen valores gamma.

Necesitamos utilizar algunos medios para convertir imágenes estándar en imágenes PNG. El proceso es el siguiente:

Separe el canal transparente. De hecho, muchas imágenes estándar no tienen un canal transparente, por lo que puede usar sin transparencia de forma predeterminada y guardar un canal.

Si el número de valores de píxeles diferentes es menor que 256 y la profundidad de la muestra es menor o igual a 8, puede comenzar a construir el índice.

Si la profundidad de la muestra de color es consistente y cada canal tiene el mismo valor, se puede usar un canal para representarlos a todos, es decir, una imagen en escala de grises.

Un método para expresar transparencia sin utilizar un canal alfa, que requiere establecer un color de fondo.

No todas las profundidades son compatibles con PNG, solo 1, 2, 4, 8 y 16. Si no son estos números, la profundidad debe ajustarse mediante software.

Por ejemplo, la profundidad original es 5, y ahora es necesario cambiarla a 8, que es para expandirla.

Si diferentes canales tienen diferentes profundidades, seleccionaremos la profundidad máxima a ajustar.

Esta transformación de profundidad es reversible.

Existen cinco tipos de contraseñas:

Existen dos métodos para la extracción de Pass.

El primero es un método vacío, que no hace nada. (Entonces, ¿por qué deberíamos ser tan rígidos y considerar esto como un método?

El segundo método consiste en obtener siete imágenes reducidas mediante múltiples escaneos. Es decir, el algoritmo Adam7 (no el algoritmo Adam de aprendizaje profundo).

Sin embargo, este algoritmo difícilmente se puede encontrar en sitios web nacionales y la introducción en Wikipedia (https://en.wikipedia.org/wiki/Adam7_algorithm) no es muy clara. Así que hablaré brevemente de ello aquí:

Lea la imagen reducida obtenida arriba (por supuesto, el método vacío lee la imagen original) y léala nuevamente línea por línea. (Puede haber muchas operaciones aquí, como convertir la extracción anterior en un rendimiento)

Hay varios tipos de filtro, y el tipo de filtro se escribirá antes de la matriz de filtros.

Es codificación y cifrado.

Dividir los datos codificados en uno o más bloques.

Un archivo PNG estándar consta de muchos bloques, cada bloque tiene cuatro partes: longitud, nombre, cuerpo de datos y código de verificación.

La definición PNG estándar tiene 18 tipos de bloques, además puedes agregar bloques personalizados.

Estos 18 tipos de bloques son:

Bloques clave:

IHDR (encabezado de archivo de encabezado de imagen), PLTE (paleta de paleta), IDAT (datos de imagen (imagen contenido), IEND (final de archivo de imagen)

Bloque auxiliar:

Relacionado con transparencia: tRNS (información de transparencia)

Relacionado con color: cHRM (cromaticidades y blanco cromaticidad de puntos y punto blanco), gAMA (valor gamma gamma), iCCP (perfil ICC integrado, descripción general de ICC integrado), sBIT (bits efectivos significativos), sRGB (espacio de color RGB estándar, espacio de color RGB estándar)

Relacionado con el texto: iTXt (texto internacionalizado de datos textuales internacionales), tEXt (texto con datos textuales), zTXt (texto comprimido con datos textuales zip)

Relacionado con el tiempo: time (hora de última modificación (última hora de modificación)

Otros: bKGD (color de fondo), hIST (histograma), pHYs (dimensiones físicas en píxeles), sPLT (paleta sugerida),

Errores de transmisión o corrupción de archivos, que destruyen la mayoría o la totalidad de el flujo de datos; errores de sintaxis, bloques no válidos o bloques faltantes.

Se deben distinguir los dos métodos de manejo de errores.

Puede enviar extensiones relevantes a ISO/IEC o PNG Group, registrar nuevos tipos de bloques y palabras clave de texto, y expandir nuevos algoritmos de filtrado, algoritmos de modo intercalado y algoritmos de compresión.

Es la estructura binaria del flujo de datos.

Los primeros ocho caracteres de todos los flujos de datos PNG son 137 80 78 78 71 13 10 26 10

En bytes, es b'\x89PNG\r\n\x1a\ n '

Esta firma indica que los siguientes datos son todos flujos de datos PNG. No interrumpa si encuentra un carácter nulo que debe completarse.

Cada bloque consta de estas cuatro partes:

La convención de nombre permite al decodificador PNG obtener información relevante a través del nombre incluso si no puede identificar el propósito del bloque actual.

El nombre de un bloque tiene cuatro dígitos:

El primer dígito indica auxiliar, las minúsculas indican que este bloque es un bloque auxiliar y las mayúsculas indican que este bloque es un bloque clave.

El segundo dígito indica privado, las minúsculas indican que este bloque es privado y no está definido por estándares internacionales, y el tamaño indica los 18 tipos de bloques antes mencionados.

El tercer bit es un bit reservado. Las minúsculas indican que el bloque se descarta, mientras que las mayúsculas indican que se puede utilizar. (usado para acordar una futura expansión)

El cuarto dígito indica seguridad de copia, es decir, cuando el editor PNG encuentra un bloque de datos inseguro al editar una imagen, no lo copiará por completo. selectivo y mayúscula significa que el editor PNG puede copiarlo completamente sin preocuparse por ningún problema.

Consulte el algoritmo crc32 para obtener más detalles.

Debido a que las imágenes PNG se pueden leer en forma de transmisión, lo que significa que no es necesario leerlas. Vista previa en el navegador hasta el final del archivo.

Por lo tanto, es necesario preparar algunas cosas antes de leer el contenido de la imagen, como indexar la paleta.

¿Parece que fue escrito en el Capítulo 4.3?

Como escribimos en el Capítulo 4.4, hay cinco tipos de color:

Los tipos de color se registran en IHDR.

En el modo escala de grises, el brillo depende de gAMA, sRGB, iCCP, o sin estos, de la máquina.

La muestra de color no es necesariamente proporcional a la intensidad de la luz y se puede ajustar configurando gAMA.

El valor se calcula de la siguiente manera: inicialmente 0, usando la paleta más 1, usando color verdadero más 2, usando el canal de transparencia más 4. La indexación no se puede utilizar en escala de grises.

Hay cuatro formas de representar la transparencia: usar un canal de transparencia, usar un bloque tRNS para establecer información de color transparente, configurar la tabla alfa en tRNS en el índice y no usar un canal de transparencia o usar tRNS para representan opacidad total.

La profundidad de muestra del canal transparente es 8 y 16. El canal transparente se almacena en el píxel, lo que significa completamente transparente, lo que significa completamente opaco. La transparencia se utiliza para combinar los colores de primer plano y de fondo de una imagen.

Algunas imágenes normales no contienen transparencia, e incluso multiplican el valor de píxel por la transparencia y realizan el paso compuesto con negro como fondo de antemano, pero PNG no hace esto;

Los números enteros (int) son bytes de varios bits, los cortos son dos, los int son cuatro y los largos son ocho.

PNG utiliza el orden de bytes de la red, con MSB en orden superior y LSB en orden inferior.

Es decir, las filas de cada imagen PNG, con los píxeles individuales empaquetados muy juntos.

Cuando la profundidad es inferior a 8, el final de la línea de escaneo puede contener bytes incompletos y estos bytes no utilizados no se procesan.

Los filtros pueden mejorar la compresibilidad de los datos comprimidos y son reversibles. PNG permite el filtrado de datos de líneas de exploración; en otras palabras, no se requiere filtrado.

La secuencia de bytes después del filtrado es la misma que antes del filtrado, pero dependiendo del tipo de filtrado, se agregará una marca de byte al principio.

Si no se aumenta la longitud, significa que no hay filtrado. El método de filtrado específico se explicará más adelante.

El modo entrelazado puede mejorar la velocidad de carga de imágenes de red en monitores CRT (en otras palabras, sin red y sin monitor CRT, el modo entrelazado es inútil).

Consulte [4.5.2 Extracción de pases](#4.5.2 Extracción de pases)

Debido a las características de Adam7, las imágenes con un ancho o alto inferior a 5 carecerán de miniaturas. (2 en la quinta columna, 3 en la quinta fila).

El objetivo del filtrado es mejorar la tasa de compresión. El método de filtrado no es único. En el modo entrelazado, todas las imágenes reducidas deben utilizar el mismo método de filtrado. En el modo no entrelazado, solo hay una imagen y, por supuesto, solo hay un método.

Este estándar define un método número 0, y otros números están reservados para el futuro. El método 0 contiene cinco tipos de filtros y se puede utilizar un tipo de filtro diferente para cada línea de exploración.

La especificación PNG no exige el tipo de filtro. El método de selección específico se describirá más adelante.

El filtro se basa en bytes y no tiene nada que ver con píxeles, canales o profundidad. Solo da bytes para filtrar.

Aquí están las definiciones de varios parámetros:

Org() representa el valor del byte original

Flt() representa el valor filtrado

;

Rc() representa el valor reconstruido;

Paeth() Consulte [9.4 Tipo de filtro 4](#9.4 Tipo de filtro 4).

Si no hay ningún píxel anterior, utilice 0 en su lugar. La primera línea de cada miniatura, que no tiene la línea anterior, también se reemplaza por 0.

Dado que se utiliza filtrado, los cálculos deben realizarse en este orden durante la reconstrucción.

Los valores de entrada y salida del filtro son bytes sin signo.

Los tres tipos de filtros 0, 1 y 2 son muy simples, simplemente resta cada dos columnas/filas.

Pero en el tercer tipo, Flt(x) = Org(x) - floor((Org(a) Org(b)) / 2), Org(a) Org(b) tiene desbordamiento. En este caso, las operaciones de bytes no se pueden utilizar y deben ser cortas o de más bits. Por supuesto, también existe un algoritmo de desplazamiento a la derecha.

El algoritmo Paeth primero calcula los valores lineales de tres píxeles adyacentes (izquierda, superior, superior izquierda) y selecciona el píxel adyacente más cercano al valor calculado para calcular nuevamente. Tenga cuidado de no desbordar el caché. Su función es la siguiente:

Al igual que con el filtrado anterior, el método predeterminado es 0. Estos dos están marcados en IHDR.

Por supuesto, aquí se utiliza la compresión zlib, utilizando el nivel predeterminado de 8, y los bytes comprimidos no superan los 32768.

Este valor de verificación es diferente del valor de verificación del bloque PNG y los dos no se pueden confundir.

Se empaquetarán y comprimirán varias líneas filtradas en un flujo de datos zlib y se colocarán en varios bloques PNG. Los múltiples bloques PNG se descomprimirán para obtener un flujo de datos zlib.

Por supuesto, esto también implica lectura asincrónica. El flujo de datos zlib en sí se puede interrumpir. Incluso si se interrumpe, los datos organizados anteriormente aún se pueden leer. Solo de esta manera se puede interpretar el modo entrelazado. Por lo tanto, se realizan las siguientes mejoras en el método de Python anterior:

Cree una lectura continua que analice a medida que lee.

Aquí hay una introducción a los 18 bloques de especificación PNG:

IHDR es el primer bloque en el flujo de datos PNG. La composición es la siguiente:

Entonces, la longitud del bloque IHDR es 13 y no cambiará.

La paleta es una matriz bidimensional, que puede considerarse como Matriz[n][3], y utiliza el índice n para representar el color.

Por lo tanto, n no puede exceder 256 y la longitud del bloque PLTE también es múltiplo de 3.

La paleta tiene 8 bits de profundidad de todos modos, incluso si la imagen tiene 1, 2 o 4 profundidades, la paleta sigue siendo 8.

Todos los bloques IDAT combinados son un flujo de datos zlib, consulte [10 Compresión] (#10 Compresión).

Estos datos están vacíos, lo que indica que el flujo de datos PNG ha finalizado. Por supuesto, todo estará bien si este bloque está dañado.

Este es un bloque que representa información de transparencia, el cual tiene tres componentes:

Modo escala de grises (cualquier color igual a esta escala de grises se considera transparente)

Modo True Color (estos tres valores representan un color transparente)

Modo índice (en modo índice, tRNS es equivalente a una tabla alfa. Esta tabla es tan grande como el índice y corresponde a la transparencia del índice)

¿Por qué el modo de escala de grises y el modo de color verdadero están representados por 2 bytes? Porque necesitan adaptarse a una profundidad de 16 bits y la profundidad del modo de índice siempre es menor o igual a 8.

Este bloque se utiliza para establecer un espacio de color CIE. La composición es la siguiente:

El valor almacenado es 100000 veces el valor real.

El espacio de cromaticidad CIE es una imagen bidimensional, que consta de cuatro puntos de rojo, verde, azul y blanco para construir un triángulo miope que rodea el círculo para establecer el grado de cambio de color.

Este bloque solo almacena un int sin signo y su valor debe dividirse por 100000 para obtener el valor gamma real.

Este bloque se utiliza para establecer una descripción ICC.

PNG solo admite profundidad fija. Si la profundidad de la imagen original no coincide, se forzará a escalar, pero la información original se conservará aquí para restaurar la imagen original. (Por lo tanto, generalmente no se usa, ¿por qué deberíamos convertir imágenes estándar en imágenes no estándar?

Existen diferentes longitudes de sBIT para diferentes números de canal.

Utilizando el espacio de color sRGB, ICC no se puede utilizar para describirlo en este momento. sRGB solo contiene un byte sin firmar, lo que indica la intención de representación.

El significado del valor es el siguiente:

Cuando se usa sRGB, se recomienda usar gAMA y cHRM, debido a que algunos dispositivos no son compatibles con sRGB, por lo que se pueden usar para compatibilidad.

Lo anterior es una palabra clave utilizada en información de texto. La palabra clave en realidad no es muy crítica, es solo una definición y usted mismo puede cambiarla. Pero aquellos que cumplan con lo anterior se pueden leer según los estándares del software de imágenes.

tEXt contiene los siguientes componentes:

Por supuesto, el método de compresión aquí también es 0, use zlib para descomprimir los datos posteriores

Datos de texto internacionales, a poco de gama alta.

Para los tipos de idiomas, consulte RCF-3066, ISO 646 e ISO 639.

Color de fondo.

El histograma da la frecuencia aproximada de uso de cada color de la paleta.

Si el navegador PNG no puede proporcionar todos los colores de la paleta, el histograma puede ayudar a crear una paleta similar para usar.

Por supuesto, ya no existe ningún software que no proporcione una paleta de colores completa.

Este bloque se utiliza para representar el tamaño real de los píxeles en la pantalla. La estructura es la siguiente:

Hay dos especificaciones de unidad. Cuando es Falso, significa que este bloque solo representa la relación entre largo y ancho, no el valor real. Cuando es Verdadero, la unidad es metros; es decir, una unidad es un metro y una unidad es un metro. ¿Cuántos píxeles contiene un metro?

La longitud específica del canal está determinada por la profundidad de la muestra. Una profundidad de 16 significa dos, y una profundidad de 8 o menos significa uno.

Los nombres de las paletas distinguen entre mayúsculas y minúsculas y están sujetos a las mismas restricciones que los argumentos de palabras clave.

En imágenes PNG en escala de grises, cada malla suele tener valores iguales de rojo, verde, azul y azul, pero esto no es obligatorio.

Cada valor de frecuencia es proporcional a la proporción de píxeles de la imagen, no a la frecuencia real.

Aquí se utiliza la hora universal (UTC)

La siguiente fórmula es demasiado complicada, olvídalo, simplemente hazlo