如何减小缩略图的大小?

fali9999 2006-06-14 06:55:05
为什么生成的缩略图比原图还大?尤其是生成的png文件,从10几k缩略后变成100多k了!
有没有好的办法,减小缩略图的大小?至少比原图小吧!
public static void GetThumbnail(string originalImagePath, int width, int height, string mode)
{
System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);
byte[] smallPic = null;
int towidth = width;
int toheight = height;

int x = 0;
int y = 0;
int ow = originalImage.Width;
int oh = originalImage.Height;

switch (mode)
{
case "Auto":// 自适应
if ((double)width / (double)ow < (double)height / (double)oh)
toheight = oh * width / ow;
else
towidth = ow * height / oh;
break;
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图片
System.Drawing.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
{
bitmap.Save(@"E:\Test\smallPic.png", ImageFormat.Png);
}
catch (System.Exception e)
{
throw e;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
}
...全文
311 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
williamhp 2006-06-20
  • 打赏
  • 举报
回复
http://www.codeproject.com/aspnet/thumbtools.asp
jianjian51 2006-06-16
  • 打赏
  • 举报
回复

不要给我分了 只用在百事创意大赛上
http://jay.pepsi.163.com/article.jsp?id=16255
点击"我也要帮他评分" 用163邮箱登陆 给我评分
我还差几票


读的时候用字节
huacha 2006-06-16
  • 打赏
  • 举报
回复
http://www.wave12.com/web/SigCon.asp?bCate=41&sCateName=%B9%A6%C4%DC%BD%E9%C9%DC&ID=143&CateName=wsChart4.5(DLL)
Reeezak 2006-06-15
  • 打赏
  • 举报
回复
一定要png??

我不知道imageready行不行,但是它生成的优化图片非常的小

但它是不是能生成优化的png就说不准了
fali9999 2006-06-15
  • 打赏
  • 举报
回复
因为工作需要必须要转换成png格式,我试过很多方法都很大,不够理想。
看到wsImage介绍的不错,可惜都是试用版,有没有免费版本提供一下?
ilove8 2006-06-15
  • 打赏
  • 举报
回复
up
jackyped 2006-06-15
  • 打赏
  • 举报
回复
设置格式和原图一样,看大小是不是一样
如果还是大,就是你的所略图质量太高
Knight94 2006-06-15
  • 打赏
  • 举报
回复
可能是
bitmap.Save(@"E:\Test\smallPic.png", ImageFormat.Png);

这里的问题,其实缩略图没必要是png格式,因为对于png格式来说,不同的编码大小也不一样。
你用jpg来存会小很多。
yuqi508 2006-06-15
  • 打赏
  • 举报
回复
public bool ThumbnailCallback()
{
return false;
}
public void Example_GetThumb(PaintEventArgs e)
{
Image.GetThumbnailImageAbort myCallback =
new Image.GetThumbnailImageAbort(ThumbnailCallback);
Bitmap myBitmap = new Bitmap("Climber.jpg");
Image myThumbnail = myBitmap.GetThumbnailImage(
40, 40, myCallback, IntPtr.Zero);
e.Graphics.DrawImage(myThumbnail, 150, 75);
}
fali9999 2006-06-15
  • 打赏
  • 举报
回复
huacha() :
在哪里下载啊?
huacha 2006-06-14
  • 打赏
  • 举报
回复
wsImage生成的图片比较小而且清晰你可以试下

111,093

社区成员

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

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

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