问题描述
生成PNG缩略图背景怎么透明?透明背景的PNG图片用C#生成一下,原来的背景就变黑色了,请问有方法解决么?请高手或有经验的同仁帮办解决.谢谢.........代码如下:///<summary>///生成缩略图///</summary>///<paramname="originalImagePath">源图路径(物理路径)</param>///<paramname="thumbnailPath">缩图路径(物理路径</param>///<paramname="width">缩略图的宽度</param>///<paramname="height">缩缩略图的高度</param>///<paramname="mode">生成缩略图的方式</param>publicstaticvoidCreateThumbnailImage(stringoriginalImagePath,stringthumbnailPath,intwidth,intheight,stringmode,stringsaveFormat){//ImageoriginalImage=Image.FromFile(INKRequest.Server.MapPath(originalImagePath));inttowidth=width;inttoheight=height;intx=0;inty=0;intow=originalImage.Width;intoh=originalImage.Height;switch(mode){case"HW"://指定高度缩略(可能变形)break;case"W"://指定宽度,高按比例toheight=originalImage.Height*width/originalImage.Width;break;case"H"://指定高,宽按比例towidth=originalImage.Width*height/originalImage.Height;break;case"CUT"://不变形if((double)originalImage.Width/(double)originalImage.Height>(double)towidth/(double)toheight){oh=originalImage.Height;ow=originalImage.Height*towidth/toheight;y=0;x=(originalImage.Width-ow)/2;}else{ow=originalImage.Width;oh=originalImage.Width*height/towidth;x=0;y=(originalImage.Height-oh)/2;}break;default:break;}//新建一个BMP图片Imagebitmap=newSystem.Drawing.Bitmap(towidth,toheight);//Imageim=newSystem.Drawing.//新建一个画板Graphicsg=System.Drawing.Graphics.FromImage(bitmap);//设置高质量插值法g.InterpolationMode=System.Drawing.Drawing2D.InterpolationMode.High;//设置高质量,低速度呈现平滑程度g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.HighQuality;//清空画布并以透明背景色填充g.Clear(Color.Transparent);//在指定位置并且按指定大小绘制原图片的指定部分g.DrawImage(originalImage,newRectangle(0,0,towidth,toheight),newRectangle(x,y,ow,oh),GraphicsUnit.Pixel);try{//以jpg格式保存缩略图switch(saveFormat){case"PNG":bitmap.Save(thumbnailPath,System.Drawing.Imaging.ImageFormat.Png);break;case"GIF":bitmap.Save(thumbnailPath,System.Drawing.Imaging.ImageFormat.Gif);break;case"BMP":bitmap.Save(thumbnailPath,System.Drawing.Imaging.ImageFormat.Bmp);break;case"JPG":bitmap.Save(thumbnailPath,System.Drawing.Imaging.ImageFormat.Jpeg);break;default:bitmap.Save(thumbnailPath,System.Drawing.Imaging.ImageFormat.Jpeg);break;}}catch(System.Exceptione){throwe;}finally{originalImage.Dispose();bitmap.Dispose();g.Dispose();}}
解决方案
解决方案二:
//清空画布并以透明背景色填充g.Clear(Color.Transparent);把上面的改成//清空画布并以白色填充g.Clear(Color.White);
解决方案三:
楼上的正解
解决方案四:
引用1楼tbwind的回复:
//清空画布并以透明背景色填充g.Clear(Color.Transparent);把上面的改成//清空画布并以白色填充g.Clear(Color.White);
顶一个
解决方案五:
这个我也在问,我的画布下面有东西的要求在透明的画布上画东西。所以画布不能填充为白色。哪位帮我看看啊顺便帮顶~~http://topic.csdn.net/u/20100128/18/dc6cd0e9-bc08-4b4d-a32e-4d68a968c2b9.html
解决方案六:
要透明,就不能使用jpeg格式保存,只能使用png,gif格式保存图片,jpeg格式本身是不支持透明的。
解决方案七:
引用5楼jimh的回复:
要透明,就不能使用jpeg格式保存,只能使用png,gif格式保存图片,jpeg格式本身是不支持透明的。
和格式无关,就是在用透明色填充画布的时候画布显示的是黑色。
解决方案八:
是图片显示时要背景透明吗像背景图片的背景色为透明的吗是的话是把TransparencyKey设置为位图文件背景色因为我菜鸟不知道你要的是不是这,你的好像是自绘的
解决方案九:
System.Drawing.BitmapmapGear=newSystem.Drawing.Bitmap(picWidth,picWidth,System.Drawing.Imaging.PixelFormat.Format8bppIndexed);mapGear.MakeTransparent()
解决方案十:
//清空画布并以透明背景色填充g.Clear(Color.Transparent);删除
解决方案十一:
遇到同样的问题,这些方法都试了,还是不行,在画图程序中打开,背景依然为黑色
解决方案十二:
OpenFileDialogofd=newOpenFileDialog();ofd.Filter="PDN|*.png";if(ofd.ShowDialog()==DialogResult.OK){Imageimg=Image.FromFile(ofd.FileName);if(img!=null){img.GetThumbnailImage(20,20,null,IntPtr.Zero).Save("C:\thumb.png");}}
经测试,没有任何问题
解决方案十三:
浏览器问题有的浏览器不支持PNG透明
解决方案十四:
//新建一个BMP图片Imagebitmap=newSystem.Drawing.Bitmap(towidth,toheight);这个修改下,改成Imagebitmap=newSystem.Drawing.Bitmap(towidth,toheight,PixelFormat.Format32bppPArgb);