por ThE InSpEcToR
Introducción
En
la entrada anterior se hizo una breve descripción de la
especificación PNG, ahora en esta entrada se hará un análisis
sobre un archivo con este formato, teniendo en cuenta la información
de la entrada anterior. Como ejemplo se utilizará un archivo 4x4
pixceles, en color indexado:
El
cual al abrirle con un editor hexadecimal se pueden ver las secciones
descritas anteriormente.
Datos
hexadecimales
|
Descripción
|
89 50 4E 47
|
Firma del archivo
PNG
|
0D 0A 1A 0A
|
CRC32 de la firma
|
00 00 00 0D
|
Longitud de la
sección IHDR (13Bytes)
|
49 48 44 52
|
Nombre de la
sección (IHDR)
|
00 00 00 04 00 00
00 04 02 03 00 00 00
|
Datos de la sección
IHDR
|
D4 9F 76 ED
|
CRC32 de la sección
IHDR
|
00 00 00 0C
|
Longitud de la
sección PLTE (12Bytes)
|
50 4C 54 45
|
Nombre de la
sección (PLTE)
|
00 00 FF FF 00 00 00 FF 00 FF FF FF
|
Datos de la sección
(4 colores RGB)
|
57 3B 0D 57
|
CRC32 de la sección
PLTE
|
00 00 00 10
|
Longitud de la
sección IDAT (16Bytes)
|
49 44 41 54
|
Nombre de la
sección (IDAT)
|
08 D7 63 08 65 58
C5 C0 C0 F0 1F 00 06 AC 01 FF
|
Datos de la sección
IDAT Los cuales se encuentran comprimidos con algoritmo DEFLATE
librería zlib.
|
F1 17 DE 41
|
CRC32 de la sección
IEND
|
00 00 00 00
|
Longitud de la
sección IEND (0Bytes)
|
49 45 4E 44
|
Nombre de la
sección IEND
|
AE 42 60 82
|
CRC32 de la sección
IEND
|
Datos
de la sección IHDR
Datos
|
Descripción
|
00 00 00 04
|
Ancho de la imagen
(4 pixceles)
|
00 00 00 04
|
Alto de la imagen
(4 pixceles)
|
02
|
Color depth (bits
por entrada)
|
03
|
Tipo de color
(Color indexado)
|
00
|
Filtros utilizados
(Filtros predefinidos)
|
00
|
Método de
compresión (DEFLATE)
|
00
|
Método de
interlineado (Ninguno)
|
Datos de la
sección PLTE
Datos
|
Descripción
|
00
00 FF
|
Color azul indice 0 |
FF
00 00
|
Color rojo indice 1 |
00
FF 00
|
Color verde indice 2 |
FF
FF FF
|
Color blanco indice 3 |
Datos de la
sección IDAT
En
primera medida vamos a descomprimir los datos de esta sección ya que
como se describe en la sección IHDR se encuentran comprimidos con el
algoritmo DEFLATE de la librería zlib.
Para
ello podemos usar algo de código en python para obtener nuestros
datos:
Ahora
teniendo en cuenta que por cada linea se agrega 1Byte que contiene el
código del filtro utilizado para esa linea y que para cada entrada
se utilizan 2bits para almacenar el indice del color en la sección
PLTE se tiene.
Cod. Filtro
|
Indices del color
|
|||
0
|
1
|
1
|
1
|
1
|
0
|
2
|
2
|
2
|
2
|
0
|
0
|
0
|
0
|
0
|
0
|
3
|
3
|
3
|
3
|
No hay comentarios.:
Publicar un comentario