4

我需要将 JPG 图像转换为 PNG 并将其白色背景更改为透明。我正在使用 ImageMagick.NET 并且我发现以下 ImageMagick 命令应该可以实现我想要实现的目标:

convert image.jpg -fuzz XX% -transparent white result.png

我曾尝试将其转换为 c#,但我得到的只是一个白色背景的 png 图像。我的代码片段:

using (var img = new MagickImage("image.jpg"))
{
     img.Format = MagickFormat.Png;
     img.BackgroundColor = MagickColors.White;
     img.ColorFuzz = new Percentage(10);
     img.BackgroundColor = MagickColors.None;
     img.Write("image.png");
}

任何形式的帮助将不胜感激。谢谢!!

4

2 回答 2

4

这是一个较晚的回复,因为我自己花了一段时间才找到答案,但这似乎对我很有效。查看为 Background 属性分配透明值的位置。

using (var magicImage = new MagickImage())
            {
                var magicReadSettings = new MagickReadSettings
                {
                    Format = MagickFormat.Svg,
                    ColorSpace = ColorSpace.Transparent,
                    BackgroundColor = MagickColors.Transparent,
                    // increasing the Density here makes a larger and sharper output to PNG
                    Density = new Density(950, DensityUnit.PixelsPerInch)
                };

                magicImage.Read("someimage.svg", magicReadSettings);
                magicImage.Format = MagickFormat.Png;

                magicImage.Write("someimage.png");

            }

就我而言,我想将其发送到 UWP Image 元素,因此我在上述步骤之后执行了以下操作,而不是 Write():

                // Create byte array that contains a png file
                byte[] imageData = magicImage.ToByteArray();

                using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
                {
                    using (DataWriter writer = new DataWriter(stream.GetOutputStreamAt(0)))
                    {
                        writer.WriteBytes(imageData);
                        await writer.StoreAsync();
                    }

                    await bitmapImage.SetSourceAsync(stream);
                }


return bitMapImage; // new BitMapImage() was scoped before all of this

然后在 UWP Image 元素上,只需使用:

imageElement.Source = bitMapImage;
于 2019-07-19T21:53:08.800 回答
3

命令行上的大多数参数都是 MagickImage 类的属性或方法。您的命令将转换为:

using (var img = new MagickImage("image.jpg"))
{
    // -fuzz XX%
    img.ColorFuzz = new Percentage(10);
    // -transparent white
    img.Transparent(MagickColors.White);
    img.Write("image.png");
}
于 2017-08-22T15:13:27.227 回答