Convert Transparent PNG to JPG with Non-Black Background Color
Asked Answered
M

1

47

I'm using System.Drawing.Image in .Net to do a simple conversion from png to jpeg. I'm basically just using these two lines of code:

Image img = Image.FromFile(filename);
img.Save(newFilename, System.Drawing.Imaging.ImageFormat.Jpeg);

it works fine except for when the png files contain transparency due to the alpha channel. In which case the converted jpeg has a black background. Is there any way to make the background white instead?

Marabout answered 28/6, 2011 at 22:2 Comment(0)
T
87
// 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
}
Tremendous answered 28/6, 2011 at 22:6 Comment(5)
for anyone reading about this question in the future, I also found it helpful to set the resolution of the bitmap object before declaring the graphics object: b.SetResolution (myImage.HorizontalResolution, myImage.VerticalResolution); This will avoid some scaling issues during the conversionMarabout
How do I use the opposite, i.e. I want to move all my JPG images to PNG and all the whites should be replaced with transparent.Algebra
@Shimmy: Bitmap.SetTransparencyKey(Color.White). The saving part is easy, though - the image can be loaded in exactly the same way, and just change ImageFormat.Jpeg to ImageFormat.Png.Tremendous
OMG I used this long solution. Anyway the function name is Bitmap.MakeTransparent. Thank you so much.Algebra
@Marabout -- Setting the resolution is a good suggestion -- feel free to edit the answer.Krigsman

© 2022 - 2024 — McMap. All rights reserved.