MagickNet PNG with Transparency to JPEG

本文关键字:to JPEG Transparency with PNG MagickNet | 更新日期: 2023-09-27 18:02:37

我在ASP中使用MagickNet进行图像处理。NET c#项目。我的问题是,我上传了一个透明的PNG图像,当我将其转换为JPEG时,我得到了一个黑色背景和一些白点,而不是透明部分的白色背景。

  Stream su = upload.FileContent;
MagickNet.Image testimage = new MagickNet.Image(su);
testimage.Filter = FilterType.LanczosFilter;
testimage.Compression = CompressionType.JPEGCompression;
testimage.QuantizeDither = false;  
testimage.BackgroundColor = new Color(System.Drawing.Color.White);
testimage.Resize( new System.Drawing.Size(Convert.ToInt32(testimage.Size.Width * 0.4), Convert.ToInt32(testimage.Size.Height * 0.4)));
testimage.Write(System.Web.HttpContext.Current.Server.MapPath(".") + "''temp''" + DateTime.Now.Hour +  "-"  +DateTime.Now.Minute + "-" + DateTime.Now.Second + ".jpg");
su.Close();
su.Dispose();
testimage.Dispose();
Magick.Term();

我玩了它,总是得到错误的结果,我之后。有时我得到一个透明的背景,但图像的某些部分在外部区域有白点。我还调整了图像的大小,使其小于实际大小。我认为是调整尺寸导致了这个问题。

update:这是由于某种原因调整大小引起的。不调整大小,它工作。话虽如此,我需要调整大小,所以我需要它的工作

谢谢。

MagickNet PNG with Transparency to JPEG

尝试在白色背景图像上进行合成。

Image bg = new Image(testimage.Size, new ColorRGB(255, 255, 255));
testimage = bg.Composite(testimage, 0, 0);

首先,最好创建具有所需大小的MagickImage对象,读取具有所需大小的文件/流的速度在某些情况下可以快100倍。你可能不会有那个错误。

using(var testimage = new MagickImage(yourstream/yourFileAddress, width, height)
{
....
}

但是如果你将MagickImage转换为位图然后将位图保存为jpg你可以看到图像有一个白色的背景

using (var testBitmap = testimage.ToBitmap())
{
     testBitmap.Save(@"d:'temp.jpg"); 
}
使用

也比调用dispose成员函数好得多。因为如果代码在到达dispose调用之前抛出异常,则对象将保留在内存中。但是使用using,如果程序跳出块,对象将被处理掉。