关于图像生成略缩图的问题,我可以拿我的代码做交换。

parsely 2003-08-19 02:06:08
大家好:
我上次问了一次关于图像生成略缩图的问题 panyee(快乐王子) 给我的回复如下,不过我水平太低,实际中我还是没做成功。有哪位高手能有这方面现成的代码可以介鉴一下吗,如果可以的话,我们本着互相帮助,互相学习的态度,我把我的这个http://www.htjj.com/index.aspx 人才网源代码(C#+sqlserver2000)做交换。


//原始图片名称
string originalFilename = "c:\\222.jpg";
//生成的高质量图片名称
string strGoodFile = "c:\\222-small-good.jpg";
//生成的低质量图片名称
string strBadFile = "c:\\222-small-bad.jpg";
//缩小的倍数
int iScale = 3;

//从文件取得图片对象
System.Drawing.Image image = System.Drawing.Image.FromFile(originalFilename);
//取得图片大小
System.Drawing.Size size = new Size(image.Width / iScale , image.Height / iScale);
//新建一个bmp图片
System.Drawing.Image bitmap = new System.Drawing.Bitmap(size.Width,size.Height);
//新建一个画板
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.Blue);
//在指定位置画图
g.DrawImage(image, new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
new System.Drawing.Rectangle(0, 0, image.Width,image.Height),
System.Drawing.GraphicsUnit.Pixel);
//保存高清晰度的缩略图
bitmap.Save(strGoodFile, System.Drawing.Imaging.ImageFormat.Jpeg);
//取得原图像的普通缩略图
System.Drawing.Image img = image.GetThumbnailImage(image.Width / iScale, image.Height / iScale, null, IntPtr.Zero);
//保存普通缩略图
img.Save(strBadFile, System.Drawing.Imaging.ImageFormat.Jpeg);

g.Dispose();
MessageBox.Show("生成完毕");
...全文
136 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
parsely 2003-08-19
  • 打赏
  • 举报
回复
多谢楼上的两位,我在试试!
xielk 2003-08-19
  • 打赏
  • 举报
回复
就是拿快乐王子的代码做的缩略图,效果不错,如果你们只是生成小图的话根本就没必要这么复杂

只用这句就可以搞定了:System.Drawing.Image img = image.GetThumbnailImage(image.Width / iScale, image.Height / iScale, null, IntPtr.Zero);


如果生成比较大的缩略图快乐王子的办法很有用,效果也不错

你把具体的错误描述贴出来看看
panyee 2003-08-19
  • 打赏
  • 举报
回复
那段代码是由一张原始图生成两张缩略图, 一张清晰, 一张比较模糊
首先保证你的原始图是存在的, 在文件夹或数据库中都可以
把原始图像读到Image对象中,把它缩小后存储成另一个文件(或把小图也存在数据库中)

显示的时候,用showimg.aspx?type=small&id=1
type指示要读大图还是小图, 显示链接时从记录中取出小图的byte[]
点击后取得大图byte[], 用Response.BinaryWrite()写给客户端


如果对生成图象要求不高, 直接用
//原始图片名称
string originalFilename = "c:\\222.jpg";
//生成的低质量图片名称
string strBadFile = "c:\\222-small-bad.jpg";
//从文件取得图片对象
System.Drawing.Image image = System.Drawing.Image.FromFile(originalFilename);
System.Drawing.Image img = image.GetThumbnailImage(50, 50, null, IntPtr.Zero);
//保存普通缩略图
img.Save(strBadFile, System.Drawing.Imaging.ImageFormat.Jpeg);
atian25 2003-08-19
  • 打赏
  • 举报
回复
两种方法:
1. public void DrawImage(Image, Rectangle); 设置Rectangle为你想要的缩略图大小
也就是王子说的方法。ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/_gdiplus_cropping_and_scaling_images_about.htm

2.创建缩略图像:调用 Image 对象的 GetThumbnailImage 方法创建缩略图像。
ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/_gdiplus_creating_thumbnail_images_usecsharp.htm
parsely 2003-08-19
  • 打赏
  • 举报
回复
就是做成像易趣的那样的


易趣网上的产品图片都是这样的:一张小的略缩图,然后点击放大。
但易趣并不是简单的对一张图片进行放大缩小,而是2张图片。放大的图片如果名称为 flower.gif,那么略缩图则为 flower_s.gif。而且略缩图的实际尺寸确实是很小的,不是把大图压缩成小的。

用户在发布产品图片的时候,只是发布了一张,然后系统自动自动生成两张图,一张原始的(***.gif 400*200相素),另一张为略缩的(***_s.gif 50*50相素)

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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