feat: strip alpha channel in vips image processor #42
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.
Background
GdkPixbuf-based image processing can take over 1GB of memory for processing a single high-resolution photo. We've decided to introduce another processor, hoping that it'll improve Morandi's memory profile and performance.
Problems
By default vips handles transparency differently to pixbuf when saving to jpeg.
Example:
Both processors have some exceptions, where transparency is handled inconsistently, eg:
Solution
Discard alpha when processing with Vips to increase the consistency when saving to jpeg.
Decision
Morandi.process
's public interface and VipsProcessor doesn't expose writing to png at all, I ignored consistency in that area for nowPixbuf vs Vips comparison
0.000500558
- that's how transparency is handled by GdkPixbuf-based processor for most operations0.0422601
the incosistent pixbuf processor's behaviour; transparency is deliberately stripped in Vips to increase consistency