Skip to content

Commit

Permalink
fix: IHDR must be first on write
Browse files Browse the repository at this point in the history
  • Loading branch information
dirx committed Aug 28, 2023
1 parent ba73beb commit 75946a0
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions src/png/png.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

0 comments on commit 75946a0

Please sign in to comment.