PNG图片生成 缩略图背景不透明,黑色背景,怎么做才能透明呢?

gootopcom 2008-08-22 03:28:50
生成 PNG 缩略图背景怎么透明?
透明背景的PNG图片用C#生成一下,原来的背景就变黑色了,请问有方法解决么?

请高手或有经验的同仁帮办解决.谢谢.........

代码如下:

/// <summary>
/// 生成缩略图
/// </summary>
/// <param name="originalImagePath">源图路径(物理路径)</param>
/// <param name="thumbnailPath">缩图路径(物理路径</param>
/// <param name="width">缩略图的宽度</param>
/// <param name="height">缩缩略图的高度</param>
/// <param name="mode">生成缩略图的方式</param>
public static void CreateThumbnailImage(string originalImagePath, string thumbnailPath, int width, int height, string mode,string saveFormat)
{
//
Image originalImage = Image.FromFile(INKRequest.Server.MapPath(originalImagePath));
int towidth = width;
int toheight = height;

int x = 0;
int y = 0;
int ow = originalImage.Width;
int oh = 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图片
Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

//Image im = new System.Drawing.

//新建一个画板
Graphics g = 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, new Rectangle(0, 0, towidth, toheight), new Rectangle(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.Exception e)
{ throw e; }
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
}
...全文
2965 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sy_flydream 2012-11-02
  • 打赏
  • 举报
回复
//新建一个BMP图片
Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
这个修改下,改成
Image bitmap = new System.Drawing.Bitmap(towidth,toheight,PixelFormat.Format32bppPArgb);
kiba518 2011-12-16
  • 打赏
  • 举报
回复
浏览器问题 有的浏览器不支持PNG透明
assky124 2011-12-16
  • 打赏
  • 举报
回复
            OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "PDN|*.png";
if (ofd.ShowDialog() == DialogResult.OK)
{
Image img = Image.FromFile(ofd.FileName);
if (img != null)
{
img.GetThumbnailImage(20, 20, null, IntPtr.Zero).Save("C:\\thumb.png");
}
}


经测试,没有任何问题
之苒 2011-12-16
  • 打赏
  • 举报
回复
遇到同样的问题,这些方法都试了,还是不行,在画图程序中打开,背景依然为黑色
x_radiation 2011-03-09
  • 打赏
  • 举报
回复
System.Drawing.Bitmap mapGear = new System.Drawing.Bitmap(picWidth, picWidth, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
mapGear.MakeTransparent()
dylike 2011-03-09
  • 打赏
  • 举报
回复
//清空画布并以透明背景色填充
g.Clear(Color.Transparent);

删除
jking1989 2010-01-29
  • 打赏
  • 举报
回复
是图片显示时要 背景透明吗
像背景图片的背景色为透明的吗
是的话 是把TransparencyKey 设置为位图文件背景色


因为我菜鸟不知道你要的是不是这,你的好像是自绘的
liuyu5131 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jimh 的回复:]
要透明,就不能使用jpeg格式保存,只能使用png,gif格式保存图片,jpeg格式本身是不支持透明的。
[/Quote]
和格式无关,就是在用透明色填充画布的时候画布显示的是黑色。
jimh 2010-01-29
  • 打赏
  • 举报
回复
要透明,就不能使用jpeg格式保存,只能使用png,gif格式保存图片,jpeg格式本身是不支持透明的。
liuyu5131 2010-01-29
  • 打赏
  • 举报
回复
这个我也在问 , 我的画布下面有东西的 要求在透明的画布上画东西。
所以画布不能填充为白色。 哪位帮我看看啊 顺便帮顶~~
http://topic.csdn.net/u/20100128/18/dc6cd0e9-bc08-4b4d-a32e-4d68a968c2b9.html
chxg99 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tbwind 的回复:]
//清空画布并以透明背景色填充
g.Clear(Color.Transparent);

把上面的改成
//清空画布并以白色填充
g.Clear(Color.White);
[/Quote]
顶一个
lmg1578 2010-01-28
  • 打赏
  • 举报
回复
楼上的正解
tbwind 2010-01-13
  • 打赏
  • 举报
回复
//清空画布并以透明背景色填充
g.Clear(Color.Transparent);

把上面的改成
//清空画布并以白色填充
g.Clear(Color.White);

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧