Skip to content

round palette bit depth up for png and gif colours - #4569

Merged
lovell merged 1 commit into
lovell:mainfrom
metsw24-max:palette-bitdepth-round-up
Jul 16, 2026
Merged

round palette bit depth up for png and gif colours#4569
lovell merged 1 commit into
lovell:mainfrom
metsw24-max:palette-bitdepth-round-up

Conversation

@metsw24-max

Copy link
Copy Markdown
Contributor

Palette bit depth rounds down instead of up

bitdepthFromColourCount maps the colours option to a PNG/GIF palette bit depth of 1, 2, 4 or 8, but it rounds the required bit count down to the nearest power of two, so a value needing 5 to 8 bits is capped at 4 and one needing 3 bits at 2. png({ colours: 128 }) and gif({ colours: 100 }) therefore emit a 16-entry palette, and colours: 8 a 4-entry one, quietly discarding colours the caller asked to keep (visible via metadata bitsPerSample). Rounding up instead keeps the stored depth one of 1/2/4/8 while making it large enough to hold the requested count.

The reduced-colours GIF size test happened to depend on the old behaviour, as colours: 128 only shrank the file because it collapsed to 16 entries, so it now uses colours: 16 which still exercises a genuinely smaller palette. Added a PNG regression test asserting the written bit depth can represent the requested number of colours.

@lovell
lovell merged commit 11e89a2 into lovell:main Jul 16, 2026
32 checks passed
@lovell

lovell commented Jul 16, 2026

Copy link
Copy Markdown
Owner

Thanks for fixing this

dadezzz pushed a commit to dadezzz/university_notes that referenced this pull request Aug 30, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [sharp](https://sharp.pixelplumbing.com) ([source](https://github.com/lovell/sharp), [changelog](https://github.com/lovell/sharp/blob/main/docs/src/content/docs/changelog.md)) | [`0.35.3` → `0.35.4`](https://renovatebot.com/diffs/npm/sharp/0.35.3/0.35.4) | ![age](https://developer.mend.io/api/mc/badges/age/npm/sharp/0.35.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/sharp/0.35.3/0.35.4?slim=true) |

---

### Release Notes

<details>
<summary>lovell/sharp (sharp)</summary>

### [`v0.35.4`](https://github.com/lovell/sharp/releases/tag/v0.35.4)

[Compare Source](lovell/sharp@v0.35.3...v0.35.4)

<https://github.com/lovell/sharp-libvips/releases/tag/v1.3.3>

- Bound resize dimensions to coordinate limit.

- Bound composite left and top to coordinate limit.
  [#&#8203;4564](lovell/sharp#4564)
  [@&#8203;metsw24-max](https://github.com/metsw24-max)

- Round palette bit depth up for png and gif colours.
  [#&#8203;4569](lovell/sharp#4569)
  [@&#8203;metsw24-max](https://github.com/metsw24-max)

- Ensure tiff.subifd input option is used.
  [#&#8203;4572](lovell/sharp#4572)
  [@&#8203;metsw24-max](https://github.com/metsw24-max)

- Ensure `info.pages` is correct when limiting input page range.
  [#&#8203;4578](lovell/sharp#4578)
  [@&#8203;metsw24-max](https://github.com/metsw24-max)

- Improve support for input Streams finishing before output is requested.
  [#&#8203;4584](lovell/sharp#4584)
  [@&#8203;Jaybhade](https://github.com/Jaybhade)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC41MC4zIiwidXBkYXRlZEluVmVyIjoiNDQuNTAuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants