From 75946a0f0e5a5d600feb191c216d8f76c82150b3 Mon Sep 17 00:00:00 2001 From: Dirk Adler Date: Mon, 28 Aug 2023 20:35:58 +0200 Subject: [PATCH] fix: IHDR must be first on write --- src/png/png.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/png/png.ts b/src/png/png.ts index 12428d6..ee647cc 100644 --- a/src/png/png.ts +++ b/src/png/png.ts @@ -59,9 +59,11 @@ export function pngWrite (chunks: Chunk[]): Uint8Array { writer.setUint32(chunk.crc) } - // write all chunks first but IDAT and IEND last - chunks.filter((chunk) => chunk.type !== ChunkType.IDAT && chunk.type !== ChunkType.IEND).forEach((chunk) => { write(chunk) }) - chunks.filter((chunk) => chunk.type === ChunkType.IDAT || chunk.type === ChunkType.IEND).forEach((chunk) => { write(chunk) }) + // write IHDR first, then all except IHDR, IDAT and IEND, then IDAT, then IEND + chunks.filter((chunk) => chunk.type === ChunkType.IHDR).forEach((chunk) => { write(chunk) }) + chunks.filter((chunk) => ![ChunkType.IHDR, ChunkType.IDAT, ChunkType.IEND].includes(chunk.type)).forEach((chunk) => { write(chunk) }) + chunks.filter((chunk) => chunk.type === ChunkType.IDAT).forEach((chunk) => { write(chunk) }) + chunks.filter((chunk) => chunk.type === ChunkType.IEND).forEach((chunk) => { write(chunk) }) return data }