Как добавить прозрачный отступ в JPG и сохранить его как PNG с прозрачностью? - PullRequest
1 голос
/ 31 октября 2019

Документация для SixLabors ImageSharp очень ограничена, и большинство поисковых запросов в Google приводят к GitHub, который не очень полезен.

Как я могу загрузить jpg, .Mutate его с прозрачным заполнением и сохранить какPNG с прозрачностью?

Это код, который я до сих пор. Если загруженное изображение является png, прозрачное заполнение работает, но jpgs получает черное заполнение:

private static void ResizeAndSavePhoto(Image<Rgba32> img, string path, int squareSize)
{
    Configuration.Default.ImageFormatsManager.SetEncoder(PngFormat.Instance, new PngEncoder()
    {
        ColorType = PngColorType.RgbWithAlpha
    });
    img.Mutate(x =>
        x.Resize(new ResizeOptions
        {
            Size = new Size(squareSize, squareSize),
            Mode = ResizeMode.Pad
        }).BackgroundColor(new Rgba32(255, 255, 255, 0))
        );
    img.Save(path);
    return;
}

.SaveAsPng() принимает поток файлов, но у меня есть Image<Rgba32> и путь ...

1 Ответ

2 голосов
/ 08 ноября 2019

Вы можете явно сохранить как png с помощью SaveAsPng, установить расширения пути на .png или передать IImageEncoder методам Save.

Документы API вы найдете по адресуhttps://docs.sixlabors.com/api/index.html

private static void ResizeAndSavePhoto(Image<Rgba32> img, string path, int squareSize)
{
    img.Mutate(x =>
        x.Resize(new ResizeOptions
        {
            Size = new Size(squareSize, squareSize),
            Mode = ResizeMode.Pad
        }).BackgroundColor(new Rgba32(255, 255, 255, 0)));

    // The following demonstrates how to force png encoding with a path.
    img.Save(Path.ChangeExtension(path, ".jpg"))

    img.Save(path, new PngEncoder());
}

Дополнительно при сохранении в поток.

img.SaveAsPng(path);
...