使用非黑色背景颜色将透明PNG转换为JPG

Dav*_*veS 44 .net c# alpha-transparency image-conversion

我在.Net中使用System.Drawing.Image进行从png到jpeg的简单转换.我基本上只使用这两行代码:

Image img = Image.FromFile(filename);
img.Save(newFilename, System.Drawing.Imaging.ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)

它工作正常,除了png文件由于alpha通道包含透明度.在这种情况下,转换的jpeg具有黑色背景.有没有办法让背景变白?

Ry-*_*Ry- 78

// Assumes myImage is the PNG you are converting
using (var b = new Bitmap(myImage.Width, myImage.Height)) {
    b.SetResolution(myImage.HorizontalResolution, myImage.VerticalResolution);

    using (var g = Graphics.FromImage(b)) {
        g.Clear(Color.White);
        g.DrawImageUnscaled(myImage, 0, 0);
    }

    // Now save b as a JPEG like you normally would
}
Run Code Online (Sandbox Code Playgroud)

  • 对于将来阅读这个问题的人,我还发现在声明图形对象之前设置位图对象的分辨率很有帮助:b.SetResolution(myImage.Horizo​​ntalResolution,myImage.VerticalResolution); 这将避免转换期间出现一些扩展问题 (5认同)
  • @Shimmy:`Bitmap.SetTransparencyKey(Color.White)`.保存部分很简单 - 图像可以以完全相同的方式加载,只需将`ImageFormat.Jpeg`更改为`ImageFormat.Png`. (3认同)
  • OMG我使用[this](http://stackoverflow.com/questions/3382683/convert-transparent-png-in-color-to-single-color/3382770#3382770)长解决方案.无论如何,函数名称是`Bitmap.MakeTransparent`.非常感谢. (2认同)