在 GDI+ 或 WPF 中保存透明 GIF

Posted

技术标签:

【中文标题】在 GDI+ 或 WPF 中保存透明 GIF【英文标题】:Save transparent GIFs in GDI+ or WPF 【发布时间】:2016-01-16 03:16:31 【问题描述】:

我正在尝试在 GDI+ 中保存具有透明度的 GIF,但它似乎重用了颜色表中的第一种颜色 - 这是 GDI 的错误吗?

即使我手动设置颜色并将 gif 重新保存为 gif,我也无法将透明 gif 输出到文件:

Bitmap b = new Bitmap("c:\\temp\\source.gif");

Bitmap canvas = new Bitmap(b.Width, b.Height);

Graphics g = Graphics.FromImage(canvas);
g.Clear(Color.Transparent);

// Draw image
g.DrawImage(b, 0, 0);

canvas.MakeTransparent(Color.Black);
canvas.Save("c:\\temp\\output.gif", System.Drawing.Imaging.ImageFormat.Gif); 

在输出图像中,黑色永远不会设置为透明色。

或者有没有办法在 WPF 中做到这一点?

【问题讨论】:

这只是一种笨拙的旧图像格式,附加了太多专利麻烦。微软选择为它提供糟糕的支持:) 仍然将它用于这样的代码是没有意义的。请改用 PNG。 如果问题出在 GIF 部分本身,那么这里是 Possible Duplicate。奖励:直接链接到Hans Passant's answer 谢谢你已经看到了,但这只会在 C# 中重新加载时修复图像,我实际上需要来自 GDI+ 的“符合标准”的输出,这样我就可以在另一个程序中通过透明或确认 GDI+ 查看 GIF不能这样做。我需要的“修复”是图像保存,而不是图像加载。 【参考方案1】:

我建议你看看这个图像处理库 ImageMagick http://www.imagemagick.org/

然后使用该命令将保存的gif转换为背景透明的gif

convert orig.gif -transparent black transp.gif

这可能不会产生完美的结果,但值得一试。如果您不想通过运行控制台命令来执行此操作,您可能还想查看 ImageMagick 的 .NET Wrapper https://magick.codeplex.com/。

【讨论】:

以上是关于在 GDI+ 或 WPF 中保存透明 GIF的主要内容,如果未能解决你的问题,请参考以下文章

将透明 PNG 保存为透明 GIF

怎么让JPG或BMP格式的背景变透明,麻烦有详细步骤,我是初级学者

图片格式

什么格式的照片可以是透明的

ps怎么保存透明图片

c++gdi如何让图片透明