[Compresión de datos 2] Análisis de formato de archivo PNG

Descripción general del formato de archivo PNG

El nombre completo de PNG es Formato gráfico de red portátil (PNG), que es un formato de almacenamiento de archivo de mapa de bits (bitmap file), que se lee como "ping".

Un archivo PNG consta de dos partes, a saber, el logotipo del archivo PNG y los bloques de datos (trozos).
La función del indicador de archivo PNG es identificar si el archivo actual es un archivo PNG; los bloques de datos se dividen en dos categorías: bloques de datos críticos (fragmentos críticos) y bloques de datos auxiliares (fragmentos auxiliares), los bloques de datos críticos son necesarios en PNG archivos y bloques de datos auxiliares son Los bloques de datos son opcionales.

estructura de archivos

Para un archivo PNG, su encabezado de archivo siempre se describe mediante bytes fijos:
número decimal 137 80 78 71 13 10 26 10
número hexadecimal 89 50 4E 47 0D 0A 1A 0A

Después de abrir un archivo PNG como se muestra en la siguiente figura, se puede observar que su encabezado de archivo es 89 50 4E 47 0D 0A 1A 0A, lo que también prueba que el archivo es un archivo PNG.
inserte la descripción de la imagen aquí

Estructura de bloque de datos PNG

Los bloques de datos PNG se dividen en dos categorías: fragmentos críticos y fragmentos auxiliares.

El bloque de datos clave consta de cuatro partes: bloque de datos de encabezado de archivo (IHDR), bloque de datos de paleta (PLTE), bloque de datos de imagen (IDAT) y datos de final de imagen (IEND). El bloque de datos de la paleta (PLTE) es opcional según la profundidad de color de la imagen.

La especificación de formato de archivo PNG especifica 10 bloques de datos auxiliares :

nombre
Bloque de datos de color de fondo bKGD (color de fondo).
Bloque de datos de color primario y blancura cHRM (cromaticidades primarias y punto blanco).
Bloque de datos gamma de imagen gAMA (gamma de imagen).
Bloque de datos de histograma de imagen hIST (histograma de imagen).
Bloque de datos de tamaño de píxel físico pHYs (dimensiones físicas de píxel).
Ejemplo de bloque de datos de bits efectivos sBIT (bits significativos).
Bloque de datos de información de texto tEXt (datos textuales).
Tiempo de última modificación de la imagen bloque de datos tIME (tiempo de última modificación de la imagen).
Bloque de datos de transparencia de imagen tRNS (transparencia).
Bloque de datos de texto comprimido zTXt (datos de texto comprimido).

Estructura de la composición del bloque de datos:

nombre bytes ilustrar
Longitud (longitud) 4 bytes Especifica la longitud del campo de datos en el bloque de datos y su longitud no excede (2^31-1) bytes
Código de tipo de fragmento (código de tipo de bloque de datos) 4 bytes El código de tipo de bloque de datos es un "símbolo de bloque de datos" que consta de letras ASCII (AZ y az)
Trozo de datos Longitud variable Almacenar datos especificados por el código de tipo de fragmento
CRC (comprobación de redundancia cíclica) 4 bytes Almacena el código de redundancia cíclica utilizado para detectar si hay un error

Analisis de CASO

Abra un archivo PNG, test.png
inserte la descripción de la imagen aquí
Abra el archivo en modo binario usando Visual Studio 2019
inserte la descripción de la imagen aquí

Análisis de bloques de datos clave

(1) bloque de datos IHDR

inserte la descripción de la imagen aquí
00 00 00 0D -----indica que la longitud del bloque de encabezado IHDR es 13
49 48 44 52 -----identificación IHDR
00 00 03 06 ------ancho de imagen, 774 píxeles
00 00 03 06 --- ---Altura de la imagen, 774 píxeles
08 ------------------Profundidad de color, 2^8=256, es decir, esta es una imagen de 256 colores
02 ---- --------------Tipo de color, imagen en escala de grises
00 ------------------La especificación PNG estipula que siempre es 0 (no 0 El valor está reservado para un mejor método de compresión en el futuro), lo que indica que el método de compresión (algoritmo derivado de LZ77)
00 ------------------PNG Spec estipula que aquí siempre es 0 (el valor distinto de cero está reservado para mejores métodos de compresión en el futuro), lo que indica que el método de compresión (algoritmo derivado de LZ77)
00 ----------------- - escaneo no entrelazado
C7 A4 04 83 -----Código de verificación CRC

(2) bloque de datos de paleta PLTE

inserte la descripción de la imagen aquí
El bloque de datos PLTE es la información de paleta que define la imagen. El PLTE puede contener de 1 a 256 información de paleta, y cada información de paleta consta de 3 bytes.

En este ejemplo, si la profundidad de color es 8, la cantidad de colores no excede 2^8=256 y la longitud de la paleta es 1216=192=364, que es un múltiplo de 3.

(3) bloque de datos de imagen IDAT

inserte la descripción de la imagen aquí
E7 14 EE 56 -----------La longitud de datos es 3876908630 bytes

60 2F FD FA ----------- Logotipo IDAT

20 20... --------------Datos comprimidos

(4) Datos finales de la imagen IEND

inserte la descripción de la imagen aquí
00 00 00 00 ------------- indica que la longitud de la parte de datos es 0, es decir, este bloque de datos no tiene ninguna parte de datos
49 45 4E 44 -------- ----- Código de tipo de datos, 49 45 4E 44 es el logotipo IEND
AE 42 60 82 -------------Código de verificación CRC

Análisis de bloques de datos auxiliares

(1) imagen gAMA y bloque de datos

inserte la descripción de la imagen aquí

(2) bloque de datos de punto blanco y color base cHRM

inserte la descripción de la imagen aquí

(3) bloque de datos de color de fondo bKGD

inserte la descripción de la imagen aquí

(4) bloque de datos de tamaño de píxel físico de pHY

inserte la descripción de la imagen aquí

(5) bloque de datos de tiempo de última modificación de la imagen TIME

inserte la descripción de la imagen aquí

referencias

【1】Trabajo de compresión de datos 2: análisis de formato de archivo PNG_Blog de Liang Qirong-blog de CSDN
【2】Análisis de formato de archivo PNG_blog de Messi0822-blog de CSDN
【3】Estructura de archivo PNG detallada-Angel_Kitty-博客园(cnblogs.com)

Supongo que te gusta

Origin blog.csdn.net/ppinecone/article/details/124375695
Recomendado
Clasificación