Honor JPEG encoding options when keeping gain maps - #4600
Draft
gregbenz wants to merge 2 commits into
Draft
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When keeping a gain map, sharp currently ignores some requested JPEG settings for the SDR base photograph. This fixes cases such as:
progressive: truenow produces a progressive base JPEG.optimiseCoding: truenow enables optimized Huffman coding for the base JPEG, allowing smaller files without changing decoded pixels.chromaSubsampling: '4:2:0'now produces a 4:2:0 base JPEG instead of 4:4:4.This works for both file and buffer output. Gain-map encoding stays the same, with chroma subsampling disabled. There are no new public APIs, and generating gain maps from scRGB works as before.
This builds on #4599, so its source-lifetime fix also appears in the diff until that PR is merged. The encoder changes are in the final commit,
53f3c89, so they can be reviewed separately.In matched local builds on macOS, all three new tests fail without the fix, and all 11 gain-map tests pass with it. They check the base JPEG settings, decode the gain map, and confirm that changing optimized coding leaves the decoded base and map pixels unchanged.
The API docs are also updated. JavaScript lint passes, and C++ lint previously passed on the same production code. This uses the base-image JPEG options added in libvips/libvips#4975, which is already merged but still needs to reach sharp’s released dependency bundle. Validation against that bundle, the full unit suite, and other platforms remains outstanding.