SixLabors/ImageSharp

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 and RELEASE 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());

Jpg image:
3_VMware Better Together

webp image looks like this (see webp in zip):
VMware Better Together

Images

VMware Better Together.zip

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.