Skip to content

faster PNG decoding and encoding - #64

Merged
matmen merged 1 commit into
masterfrom
faster-png
Oct 16, 2026
Merged

matmen merged 1 commit into
masterfrom
faster-png

Conversation

@matmen

@matmen matmen commented Oct 16, 2026

Copy link
Copy Markdown
Collaborator

Faster PNG decoding and encoding:

  • The paeth predictor is computed without branches, in both unfilter and filter: bit masks pick a, b or c. With photos, the branches are unpredictable.
  • 8-bit RGB images are converted to RGBA without the generic per-sample functions. Interlaced 8-bit RGBA no longer creates a subarray per pixel.
  • Encoding: the pixel format scan stops once nothing is left to find out (no palette, not grey, not opaque). Converting to RGB, grey and grey with alpha each has its own loop.

Identical results: decoding, every encoder and animations, checked against master on 1593 images (8397 results, 0 different).

Speed, on a 1920×1080 photo: decoding a PNG written by ImageScript takes 18–29% less time, encoding about 9% less. The changelog says about 25% and 10%.

@matmen matmen added this to the v3.2.0 milestone Oct 16, 2026
@matmen matmen self-assigned this Oct 16, 2026
@matmen matmen added the enhancement New feature or request label Oct 16, 2026
- The paeth predictor is computed without branches (bit masks pick a, b or c), in unfilter and filter: photos
  make the branches unpredictable.
- 8-bit RGB images are converted to RGBA without the generic per-sample functions, interlaced 8-bit RGBA without
  a subarray per pixel.
- Encoding: the pixel format scan stops once nothing is left to find out (no palette, not grey, not opaque), the
  conversion to RGB, grey and grey with alpha has a loop for each.

The results are bit-identical: decoding, every encoder and animations checked against master on 1593 images.
A 1920×1080 photo decodes about 25% faster (PNG written by ImageScript) and encodes about 10% faster.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJgRK5qpwJEbHPuFv6kgAQ
@matmen
matmen merged commit 3e26325 into master Oct 16, 2026
13 checks passed
@matmen
matmen deleted the faster-png branch October 16, 2026 07:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant