Estoy tratando de decodificar un archivo PNG que viene como Uint8Array desde el backend usando javascript en el navegador. Cortar Uint8Array de 15~28 y consola.Registrar los valores imprime esto: [82, 0, 0, 1, 0, 0, 0, 1, 0, 8, 6, 0, 0]. Si sumo los bytes de 0 a 4 en esta matriz, obtengo 83, que debería ser el valor para el ancho, pero el ancho es 256 px.
Con el mismo archivo intenté decodificarlo en este sitio web https://www.nayuki.io/page/png-file-chunk-inspector muestra [00 00 00 0d 49 48 44 52 00 00 01 00 00] estos valores para 15~28. Pero dice correctamente que el png tiene un ancho de 256px. Lo cual tampoco entiendo cómo, sumar 00+00+00+0d da como resultado un valor de 13 en decimal.
Hasta ahora no entiendo muy bien lo que sucede. El estándar PNG dice que http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html el ancho de IHDR es un número entero de 4 bytes entre 15 y 19, pero en la práctica no funciona.
Mirando a través del sitio web de decodificación de imágenes que vinculó, parece que los primeros 4 valores hexadecimales representan cuántos bytes hay en el resto de la cadena: es por eso que los primeros 4 funcionan como 13, porque debería haber 13 bytes en el IHDR. Además, los siguientes 4 [49, 48, 44, 52] permanecen iguales entre su imagen y todos los ejemplos "buenos" en el sitio web. El lugar real donde se almacenan el ancho y el alto son los dos bytes posteriores, que son ambos 00 00 01 00. Este valor 00000100 resulta ser 256, según este convertidor .