CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

紧急求助!!!关于缩略图与原图存入数据库的问题!!!

楼主yxd1984gz(问世间是否此山最高,直叫人生死相寻)2006-05-03 21:14:52 在 .NET技术 / ASP.NET 提问

通过数据流将图片上传到数据库中image类型的列;  
  怎么能在上传原图的时候存一个按一定比例的小图到数据库,也是image类型,  
  目前的情况是:  
  因为必须将图片存入数据库,现在将原图存入数据库;显示图片的时候用showimg.aspx?id=某某  
  用这个页面生成缩略图时要把所有的image数据全部读出,只是在显示的大小上修改,如果某页上缩略图太多,我刚才弄了一下,IE或FIREFOX的CPU使用率都是98%左右,这怎么办?  
  所以,我想显示个小图,点击看大图,这样会不会好一点?  
  或者有更好的办法?  
  给我支个招或一起研究一下,给我些启发!  
  谢谢!!!  
  问题点数:20、回复次数:3Top

1 楼yxd1984gz(问世间是否此山最高,直叫人生死相寻)回复于 2006-05-03 21:48:11 得分 0

自顶!Top

2 楼webwalker(Jason.Xu@BenQ.com)回复于 2006-05-04 10:26:39 得分 15

能完成缩略图,就好办了……  
   
  lionsky.net  
   
  using   System.Drawing.Imaging;  
  namespace   Exam_C  
  {  
  ///   <summary>  
  ///   ToThumbnailImage   的摘要说明。  
  ///   </summary>  
  public   class   ToThumbnailImage   :   System.Web.UI.Page  
  {  
  /*      
  Create   By   lion      
  2003-05-20   19:00      
  Copyright   (C)   2004   www.LionSky.Net.   All   rights   reserved.    
  Web:   http://www.Lionsky.net   ;  
  Email:   lion-a@sohu.com    
  */      
   
   
  static   Hashtable   htmimes=new   Hashtable();  
  internal   readonly   string   AllowExt   =   ".jpe|.jpeg|.jpg|.png|.tif|.tiff|.bmp";  
   
  #region   Web   窗体设计器生成的代码  
  override   protected   void   OnInit(EventArgs   e)  
  {  
  #region   htmimes[".jpe"]="image/jpeg";  
  htmimes[".jpeg"]="image/jpeg";  
  htmimes[".jpg"]="image/jpeg";  
  htmimes[".png"]="image/png";  
  htmimes[".tif"]="image/tiff";  
  htmimes[".tiff"]="image/tiff";  
  htmimes[".bmp"]="image/bmp";  
  #endregion  
  //调用生成缩略图方法  
  ToThumbnailImages("lionsky.jpg","b.gif",300);  
  }  
  #endregion  
   
  #region   Helper  
   
  ///   <summary>  
  ///   获取图像编码解码器的所有相关信息  
  ///   </summary>  
  ///   <param   name="mimeType">包含编码解码器的多用途网际邮件扩充协议   (MIME)   类型的字符串</param>  
  ///   <returns>返回图像编码解码器的所有相关信息</returns>  
  static   ImageCodecInfo   GetCodecInfo(string   mimeType)  
  {  
  ImageCodecInfo[]   CodecInfo   =   ImageCodecInfo.GetImageEncoders();  
  foreach(ImageCodecInfo   ici   in   CodecInfo)  
  {  
  if(ici.MimeType   ==   mimeType)return   ici;  
  }  
  return   null;  
  }  
   
  ///   <summary>  
  ///   检测扩展名的有效性  
  ///   </summary>  
  ///   <param   name="sExt">文件名扩展名</param>  
  ///   <returns>如果扩展名有效,返回true,否则返回false.</returns>  
  bool   CheckValidExt(string   sExt)  
  {  
  bool   flag=false;  
  string[]   aExt   =   AllowExt.Split('|');  
  foreach(string   filetype   in   aExt)  
  {  
  if(filetype.ToLower()==sExt)  
  {  
  flag   =   true;  
  break;  
  }  
  }  
  return   flag;  
  }  
   
  ///   <summary>  
  ///   保存图片  
  ///   </summary>  
  ///   <param   name="image">Image   对象</param>  
  ///   <param   name="savePath">保存路径</param>  
  ///   <param   name="ici">指定格式的编解码参数</param>  
  void   SaveImage(System.Drawing.Image   image,string   savePath,ImageCodecInfo   ici)  
  {  
  //设置   原图片   对象的   EncoderParameters   对象  
  EncoderParameters   parameters   =   new   EncoderParameters(1);  
  parameters.Param[0]   =   new   EncoderParameter(Encoder.Quality,   ((long)   90));  
  image.Save(savePath,   ici,   parameters);  
  parameters.Dispose();  
  }  
  #endregion  
   
  #region   Methods  
   
  ///   <summary>  
  ///   生成缩略图  
  ///   </summary>  
  ///   <param   name="sourceImagePath">原图片路径(相对路径)</param>  
  ///   <param   name="thumbnailImagePath">生成的缩略图路径,如果为空则保存为原图片路径(相对路径)</param>  
  ///   <param   name="thumbnailImageWidth">缩略图的宽度(高度与按源图片比例自动生成)</param>  
  public   void   ToThumbnailImages(string   sourceImagePath,string   thumbnailImagePath,int   thumbnailImageWidth)  
  {  
  string   SourceImagePath   =   sourceImagePath;  
  string   ThumbnailImagePath   =   thumbnailImagePath;  
  int   ThumbnailImageWidth   =   thumbnailImageWidth;  
  string   sExt   =   SourceImagePath.Substring(SourceImagePath.LastIndexOf(".")).ToLower();  
  if(SourceImagePath.ToString()==System.String.Empty)   throw   new   NullReferenceException("SourceImagePath   is   null!");  
  if(!CheckValidExt(sExt))  
  {  
  throw   new   ArgumentException("原图片文件格式不正确,支持的格式有[   "+   AllowExt   +"   ]","SourceImagePath");  
  }  
  //从   原图片   创建   Image   对象  
  System.Drawing.Image   image   =   System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath(SourceImagePath));  
  int   num   =   ((ThumbnailImageWidth   /   4)   *   3);  
  int   width   =   image.Width;  
  int   height   =   image.Height;  
  //计算图片的比例  
  if   ((((double)   width)   /   ((double)   height))   >=   1.3333333333333333f)  
  {  
  num   =   ((height   *   ThumbnailImageWidth)   /   width);  
  }  
  else  
  {  
  ThumbnailImageWidth   =   ((width   *   num)   /   height);  
  }  
  if   ((ThumbnailImageWidth   <   1)   ||   (num   <   1))  
  {  
  return;  
  }  
  //用指定的大小和格式初始化   Bitmap   类的新实例  
  Bitmap   bitmap   =   new   Bitmap(ThumbnailImageWidth,   num,   PixelFormat.Format32bppArgb);  
  //从指定的   Image   对象创建新   Graphics   对象  
  Graphics   graphics   =   Graphics.FromImage(bitmap);  
  //清除整个绘图面并以透明背景色填充  
  graphics.Clear(Color.Transparent);  
  //在指定位置并且按指定大小绘制   原图片   对象  
  graphics.DrawImage(image,   new   Rectangle(0,   0,   ThumbnailImageWidth,   num));  
  image.Dispose();  
  try  
  {  
  //将此   原图片   以指定格式并用指定的编解码参数保存到指定文件  
  string   savepath   =   (ThumbnailImagePath==null?SourceImagePath:ThumbnailImagePath);  
  SaveImage(bitmap,HttpContext.Current.Server.MapPath(savepath),GetCodecInfo((string)htmimes[sExt]));  
  }  
  catch(System.Exception   e)  
  {  
  throw   e;  
  }  
  finally  
  {  
  bitmap.Dispose();  
  graphics.Dispose();  
  }  
  }  
  #endregion  
   
  }  
  }  
  Top

3 楼gzlaspnet(爱程)回复于 2006-05-04 18:31:19 得分 5

我觉得上传到文件夹中更好,数据库的字段只记录图片存放路径,当然要生成缩略图上传.存一个也可以,因这一个图已经比上传的小了很多.  
  仅供参考.Top

相关问题

关键词

得分解答快速导航

  • 帖主:yxd1984gz
  • webwalker
  • gzlaspnet

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo