首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ImageMagick.Net将JPG转换为具有背景透明度的PNG

使用ImageMagick.Net将JPG转换为具有背景透明度的PNG
EN

Stack Overflow用户
提问于 2017-07-03 15:46:00
回答 2查看 4.6K关注 0票数 4

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

代码语言:javascript
复制
convert image.jpg -fuzz XX% -transparent white result.png

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

代码语言:javascript
复制
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");
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-22 23:13:27

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

代码语言:javascript
复制
using (var img = new MagickImage("image.jpg"))
{
    // -fuzz XX%
    img.ColorFuzz = new Percentage(10);
    // -transparent white
    img.Transparent(MagickColors.White);
    img.Write("image.png");
}
票数 3
EN

Stack Overflow用户

发布于 2019-07-20 05:53:09

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

代码语言:javascript
复制
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 element,所以在上面的步骤之后,我执行了以下操作,而不是Write():

代码语言:javascript
复制
                // 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元素上,只需使用:

代码语言:javascript
复制
imageElement.Source = bitMapImage;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44880248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档