SixLabors / ImageSharp

:camera: A modern, cross-platform, 2D Graphics library for .NET
https://sixlabors.com/products/imagesharp/
Other
7.35k stars 850 forks source link

WebP encoding produces a 100% transparent image #2801

Open Lovrenc opened 2 weeks ago

Lovrenc commented 2 weeks ago

Prerequisites

ImageSharp version

3.1.5

Other ImageSharp packages and versions

/

Environment (Operating system, version and so on)

Windows 11 23H2

.NET Framework version

7.0

Description

WebP encoding produces an entirely transparent image.

It seems that quality settings, lossy or lossless or EncodingMethod Level had no effect (I tested about 20 combinations).

Decoding looks ok, if I export the same image as JPEG it works fine.

Steps to Reproduce

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Jpeg;
using SixLabors.ImageSharp.Formats.Webp;

var path = "d:\\";
var img = Image.Load($"{path}bugged_image.webp");
var encoder = new WebpEncoder()
{
    Quality = 65,
    FileFormat = WebpFileFormatType.Lossy,
    TransparentColorMode = WebpTransparentColorMode.Preserve,
    Method = WebpEncodingMethod.Level2
};
await img.SaveAsync($"{path}bugged_image_result_direct.webp", encoder);

Images

bugged_image.zip

JimBobSquarePants commented 2 weeks ago

I don't think this is the encoder., I think it's the decoder. If you save the image as a PNG the same occurs.

JimBobSquarePants commented 2 weeks ago

Confirmed. It's the lossy decoder. Something is failing there when applying the alpha values to the pixels. We're getting zero for everything.