File conversion from jpg to webp changes colors of the image
WimAtIHomer opened this issue · 1 comments
Prerequisites
- I have written a descriptive issue title
- I have verified that I am running the latest version of ImageSharp
- I have verified if the problem exist in both
DEBUG
andRELEASE
mode - I have searched open and closed issues to ensure it has not already been reported
ImageSharp version
3.1.4
Other ImageSharp packages and versions
none
Environment (Operating system, version and so on)
Windows 11
.NET Framework version
6 and 8
Description
In our application we resize and change images from png and jpg to webp for better performance on the website. This works very good most of the times. But for some jpg images there is a distinct color change.
It might be related to #1567 but I am not sure, doesn't happen when just resizing the jpg image.
Steps to Reproduce
using var image = await Image.LoadAsync(file.OpenReadStream());
using var outStream = new MemoryStream();
await image.SaveAsync(outStream, new WebpEncoder());
webp image looks like this (see webp in zip):
Images
OK.... This is an interesting issue.
The JPEG has a CMYK ICC profile and is encoded using YCCK colors.
When we convert to RGB, the colors are decoded as in the WEBP output. Since we don't then reverse the operation (WEBP encodes as BGR (optional A)) the colors are incorrectly encoded. We preserve the color type as JPEG metadata so encoding reverses the decode color transform and produces a much closer result.
The fix would be to have #1567 working and convert to RGB using the profile as a guide. When that will ever happen, I simply do not know. I need help there.