如何减小缩略图的大小?

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();
}
}
...全文
301 11 打赏 收藏 转发到动态 举报
写回复
用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生成的图片比较小而且清晰你可以试下
作者:知更鸟 语言:中文 类别:CMS 版本:2.1 主题功能简介: 1.全功能的主题后台控制面板,各项功能模块化,无需任何插件; 2.摒弃1.0使用timthumb.php函数自动截图功能(无法使用外链图片),首页缩略图自定义字段为:thumbnail,顶部热点文章图片为:image; 3.增设默认缩略图随机显示功能,不添加自定义字段也不会让页面显得单调; 4.分类图标功能(默认不显示),图片格式为.png,大小40*40,将主题包中的caticon文件夹上传到\wp-content目录中,后台设置修改各分类别名(英文),并将自己找到的心仪图片(png)名称修改为各分类的别名,然后上传到caticon目录中,后台设置显示分类图标即可; 5.首页可以选择是否显示缩略图,如果不显示则首页取消文字截断,并显示全文。 6.图片延迟加载功能(默认开启),据说可以提高页面打开速度,如果认为相反可以关闭该功能; 7.默认显示博客标题及副标题,可以后台设置显示LOGO,另附LOGO源文件,主题支持IE6 png透明图片; 8.无需插件显示相关日志及缩略图(默认不显示缩略图)和随机日志; 9.登录后侧边显示站点管理面板,方便直接跳转到WordPress后台相应功能; 10.侧边集成最新日志、最热文章、最新评论功能,并支持自定义小工具; 11.后台添加订阅代码,方便浏览者订阅; 12.后台添加博客统计代码,无需手动修改模板,为博客添加统计; 13.集成分页功能,wp-pagenavi分页插件也可以删除了。 14.替换WordPress默认登录界面; 15.调用WP默认表情(默认不显示),方便在留言中加入表情; 16.替换avatar默认头像,可以到后台讨论设置选项中设置。 17.网站SEO设置(默认未开启),这是唯一需手动修改模板的功能,打开主题includes文件夹中的seo.php模板文件,将“你的首页描述”和“你首页关键字”修改为自己的内容; 18.最后一个需说明的是底部分类显示,如果你的博客分类比较多,可能会撑破模板,解决办法是,在角页剔除部分分类,打开footer.php文件定位到,在exclude=后面添加准备剔除的分类ID,格式为exclude=1,23,225,逗号为英文标点。 注:使用或修改主题请保留页角作者链接,谢谢合作! 之前发布的HotNews1.0主题只是当初的练习作品,需手动修改模板才能正常使用,对一些新手而言使用难度不小,有网友要求分享也就发布了。经过一段时间使用,修正了部分BUG,也添加了不少功能。为了方便用户使用,在原1.0版基础上重写了大部分代码,增设多达十几项的主题设置面板,实现功能模块化,不启用某项功能,也不会影响到整体布局及其它功能。由于功能的逐步强化,所以直接跳到2.0,并更名为HotNews Pro(热点新闻专业版)。新版主题几乎无需手动修改模板文件就可以正常使用,新添加的随机缩略图功能,也一定程度上减小了发日志时添加缩略图的繁琐,只要找一些与博客内容相关的图片,放到相应的文件夹中,缩略图就会在每次刷新后随机变幻。 2.0版无需任何插件,就可以实现全功能使用。唯一推荐安装的是单篇日志统计插件WP-PostViews,WP为什么不集成该项功能,也是最让国人不理解的一个问题,道理很简单,国外博主对国人关心的点击率不是很在意,他们更注重沟通或者自娱自乐,没有国人这么强的虚荣心,所以记数功能可能永远也不会集成到WordPress程序中,当然不安装该插件也不会影响正常使用。
文件格式:zip。文件大小:31.18MB。文档类型:方案(初设图)。高度类别:高层建筑。设计风格:现代风格。设计流派:现代。结构形式:钢筋混凝土结构。项目位置:福建。图纸格式:PDF。文档格式:PDF。设计说明:该项目的建筑走小而精的路线,立面时尚。精致,产品创新,增加公共交流空间,垂直绿化系统。建筑利用有顶盖无围护结构的挑廊来减小公摊面积,采用阳台每三层一跳来减小阳台爱的面积。建筑整体简洁大方。图纸包含:效果图、总平面图、各层平面图、剖面图、分析图、经济指标、设计说明。高层现代风格带凸窗住宅楼建筑效果图。高层现代风格带凸窗住宅楼建筑效果图。高层现代风格带凸窗住宅楼建筑效果图。高层现代风格带凸窗住宅楼建筑总平面图。高层现代风格带凸窗住宅楼建筑分析图。高层现代风格带凸窗住宅楼建筑分析图。高层现代风格带凸窗住宅楼建筑平面图。高层现代风格带凸窗住宅楼建筑平面图。高层现代风格带凸窗住宅楼建筑平面图。高层现代风格带凸窗住宅楼建筑剖面图。高层现代风格带凸窗住宅楼建筑剖面图。高层现代风格带凸窗住宅楼建筑剖面图。高层现代风格带凸窗住宅楼建筑剖面图。高层现代风格带凸窗住宅楼建筑缩略图
部分使用说明: 点击开始菜单-运行命令,在对话框输入: "jhead –命令参数 jpeg文件" 例如: “jhead -de D:\A.jpg” 删除D盘盘根目录下A.jpg文件的exif信息。 “jhead -de D:\*.jpg” 删除D盘根目录下所有jpg文件的exif信息。其中星号是通配符。 二、通用指令参数 -te 将其他jpeg文件的eixf导入目标jpeg。例如"jhead –te D:\B.jpg D:\A.jpg" -dc 删除jpeg信息中的备注。注意,jpeg文件有两个备注,一是和其他文件一样的备注,另一个是exif信息中的备注。jhead仅对exif信息有效。 -de 完全删除exif信息。 -du 删除非原始exif信息,例如Photoshop、Turbophoto之类编辑后修改exif留下的信息。 -purejpg 删除所有jpeg文件非必须的信息。相当于-de、-dc和-du的集合,可以将文件减小数k。 -ce 修改文件的jpeg文件头部分备注(此备注并非exif信息)。该指令会打开文本编辑器,并在编辑器关闭时将备注信息存入文件。 -cs 导出备注。例如"jhead –cs D:\988.txt D:\A.jpg" -ci 导入备注。例如"jhead –ci D:\988.txt D:\A.jpg" -cl 直接输入备注。。例如"jhead –cl 我的备注 D:\A.jpg" 三、其他指令 时间日期 -ft 将jpeg文件的“修改时间”修改为exif信息中记录的时间。 -n[] 该指令会将文件名修改为exif信息中记录的“创建时间”;如果jpeg文件没有exif或者exif中的创建时间不可用,则将文件名修改为文件的“修改时间”。 默认的格式-顺序为MMDD-HHMMSS 格式-顺序参数如下: %d-日(01-31) %H-小时(00-23) %j-一年中的第几天(001-366) %m-月(01-12) %M-分钟(00-59) %S-秒(00-59) %U-一年中的第几周(00-53) %w-星期几(0-6,周日为0) %y-两位数纪年(00-99) %Y-四位数几年 %i-添加数字序号 例如: jhead -n%Y%m%d-%H%M%S d:\*.jpg 将所有jpg文件修改为YYYYMMDD-HHMMSS.jpg的格式。 -nf 与“-n”相同功能相同,不保留原文件名。 -a 修改不同扩展名的同名文件名,相机拍摄的avi短片exif信息存储在与其同名的thm文件中,可用此指令给avi文件更名。一般与“-n”指令共同使用。 -ta 修正时差,例如时差根据时区确定,例如+1:00或者-1:00 -da- 修正日期。日期格式是yyyy:mm:dd、yyyy:nn:dd+hh:mm或者 yyyy:mm:dd+hh:mm:ss。根据前后参数时间差调整exif的时间。 -ts 直接修改exif中的拍摄时间,日期-时间格式为yyyy:mm:dd-hh:mm:ss 缩略图 -dt 删除exif中的缩略图。这个缩略图一般为240x160像素,10k大小,用于数码相机、Windows XP查看照片,删除它不会影响工作。 -st 将exif中的缩略图复制为另一个jpeg文件 -rt 用另一个jpeg文件替换exif中的缩略图 -rgt[大小] 刷新exif缩略图,其中大小缩略图的最大边长。 旋转 -autorot 根据exif中记录的水平方向信息转动jpeg照片。 -norot 清除exif中的水平方向信息。 四、使用技巧 1)用开始菜单的"运行"指令并不直观,可以通过运行cmd命令进入DOS命令提示符界面操作。在DOS界面进入操作照片文件夹(不懂DOS操作的朋友建议稍稍学习DOS指令,今后也会受用无穷),在文件夹中运行jhead命令,用“*.jpg”表示文件夹中所有的jpeg文件,可以进行批处理。 2)-te(复制exif信息)作用在于可以恢复被其他编辑软件删除的exif信息。编辑照片之前,先在照片文件夹中建立一个名为“backup”的备份文件夹,将原是照片复制到backup文件夹中,然后再编辑照片,编辑软件可能会删除或修改exif。编辑结束后进入DOS界面照片文件夹输入: jhead –te “backup\&i” *.jpg 照片的exif信息就会从backup文件夹的原始文件中复制回来。其中“&i”表示与目标文件同名的文件,前面的“backup\”表示原始文件位置。 3)-purejpg指令可以删除所有exif信息,让照片减小若干k字节

110,571

社区成员

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

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

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