在写一个多张图片拼合的程序时,遇到个问题,生成后的PNG图高达370多KB,任务需求里要求必须在100KB左右,我试了Graphics里的几个属性,输出的图片还是370KB,小弟学艺不精,请各位指点下。
附上代码:Image Idol_Bg = Image.FromFile(pde.Idol_Bg);//背景图片 Image Idol_Face = Image.FromFile(pde.Idol_Face);//偶像脸图层 Image Idol_Hair = Image.FromFile(pde.Idol_Hair);//偶像头发图层 Image Idol_Eyes = Image.FromFile(pde.Idol_Eyes);//偶像眼睛图层 Image Idol_Mouth = Image.FromFile(pde.Idol_Mouth);//偶像嘴巴图层 Graphics gs = Graphics.FromImage(Idol_Bg); gs.SmoothingMode = SmoothingMode.AntiAlias;
gs.CompositingQuality = CompositingQuality.HighSpeed;
gs.InterpolationMode = InterpolationMode.Bilinear;
//gs.Clear(Color.Transparent); gs.DrawImage(Idol_Face, new System.Drawing.Point(0, 0));
gs.DrawImage(Idol_Hair, new System.Drawing.Point(0, 0));
gs.DrawImage(Idol_Eyes, new System.Drawing.Point(0, 0));
gs.DrawImage(Idol_Mouth, new System.Drawing.Point(0, 0)); gs.DrawString("Photo By Yzone", new System.Drawing.Font("宋体", 18), System.Drawing.Brushes.Black, new System.Drawing.PointF(1,1)); Idol_Bg.Save(HttpContext.Current.Server.MapPath("images/PaperDol/"+pde.Idol_Id+"_Big.png"),ImageFormat.Png);
Idol_Face.Dispose();
Idol_Hair.Dispose();
Idol_Eyes.Dispose();
Idol_Eyes.Dispose();
Idol_Mouth.Dispose();
Idol_Bg.Dispose();
gs.Dispose();
附上代码:Image Idol_Bg = Image.FromFile(pde.Idol_Bg);//背景图片 Image Idol_Face = Image.FromFile(pde.Idol_Face);//偶像脸图层 Image Idol_Hair = Image.FromFile(pde.Idol_Hair);//偶像头发图层 Image Idol_Eyes = Image.FromFile(pde.Idol_Eyes);//偶像眼睛图层 Image Idol_Mouth = Image.FromFile(pde.Idol_Mouth);//偶像嘴巴图层 Graphics gs = Graphics.FromImage(Idol_Bg); gs.SmoothingMode = SmoothingMode.AntiAlias;
gs.CompositingQuality = CompositingQuality.HighSpeed;
gs.InterpolationMode = InterpolationMode.Bilinear;
//gs.Clear(Color.Transparent); gs.DrawImage(Idol_Face, new System.Drawing.Point(0, 0));
gs.DrawImage(Idol_Hair, new System.Drawing.Point(0, 0));
gs.DrawImage(Idol_Eyes, new System.Drawing.Point(0, 0));
gs.DrawImage(Idol_Mouth, new System.Drawing.Point(0, 0)); gs.DrawString("Photo By Yzone", new System.Drawing.Font("宋体", 18), System.Drawing.Brushes.Black, new System.Drawing.PointF(1,1)); Idol_Bg.Save(HttpContext.Current.Server.MapPath("images/PaperDol/"+pde.Idol_Id+"_Big.png"),ImageFormat.Png);
Idol_Face.Dispose();
Idol_Hair.Dispose();
Idol_Eyes.Dispose();
Idol_Eyes.Dispose();
Idol_Mouth.Dispose();
Idol_Bg.Dispose();
gs.Dispose();
解决方案 »
- 请教个FASLH+.NET实现图片批量上传路径问题
- 请教一个类似GridView的运用
- 用SqlDataReader把数据里面的数据取出来后先转换后在绑定到GridView要怎么做?
- .NET下利用JMAIL组件来设计像163那样网页形式的邮件管理系统
- insert into where 语句
- javascript
- 我还想用js处理一下<%#Eval("")%>里的变量,怎么办呢?
- 请问下CSDN文章的地址栏的随机数
- dropdownlist
- 求!!!未能找到类型或命名空间名称(是否缺少using或程序引用)
- Request.QueryString[""]问题
- 没买到票,散分(100)!(一次和黄牛党的对话)
/// 生成缩略图
/// </summary>
/// <param name="originalImagePath">源图路径(物理路径)</param>
/// <param name="thumbnailPath">缩略图路径(物理路径)</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="mode">生成缩略图的方式</param>
public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
{
Image originalImage = Image.FromFile(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); //新建一个画板
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格式保存缩略图
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch(System.Exception e)
{
throw e;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
}
System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)100)