A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 陈君 金牌黑马   /  2014-8-11 17:26  /  1290 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

转自:http://www.jb51.net/article/48831.htm
这篇文章主要介绍了c#生成高清缩略图的二个示例,需要的朋友可以参考下

  1. /// <summary>
  2. /// 为图片生成缩略图
  3. /// </summary>
  4. /// <param name="phyPath">原图片的路径</param>
  5. /// <param name="width">缩略图宽</param>
  6. /// <param name="height">缩略图高</param>
  7. /// <returns></returns>
  8. public System.Drawing.Image GetThumbnail(System.Drawing.Image image, int width, intheight)
  9. {
  10. Bitmap bmp = newBitmap(width, height);
  11. //从Bitmap创建一个System.Drawing.Graphics
  12. System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp);
  13. //设置
  14. gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
  15. //下面这个也设成高质量
  16. gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
  17. //下面这个设成High
  18. gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
  19. //把原始图像绘制成上面所设置宽高的缩小图
  20. System.Drawing.Rectangle rectDestination = newSystem.Drawing.Rectangle(0, 0, width, height);
  21. gr.DrawImage(image, rectDestination, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);
  22. returnbmp;
  23. }
复制代码

调用方法

  1. HttpPostedFile file = photoFile.PostedFile;
  2. if(!file.ContentType.Contains("image"))
  3. {
  4. return"照片格式不合法";
  5. }
  6. stringext = Path.GetExtension(file.FileName).ToLower();
  7. if (ext != ".jpg" && ext != ".gif" && ext != ".png"&& ext != ".jpeg")
  8. {
  9. return"请您上传jpg、gif、png图片";
  10. }
  11. if(file.ContentLength > 5 * 1024 * 1024)
  12. {
  13. return"请您上传512字节内的图片";
  14. }
  15. stringnewName = Guid.NewGuid().ToString();
  16. stringtempPath = "upload/";
  17. stringimg = tempPath + newName + ext;
  18. stringfilePath = Server.MapPath(img);
  19. if(!Directory.Exists(tempPath))
  20. {
  21. Directory.CreateDirectory(tempPath);
  22. }
  23. using(System.Drawing.Image originalImage = System.Drawing.Image.FromStream(file.InputStream))
  24. {
  25. GetThumbnail(originalImage, 504, 374).Save(filePath);
复制代码

示例2

  1. public void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height)
  2. {
  3. //获取原始图片
  4. System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);
  5. //缩略图画布宽高
  6. int towidth = width;
  7. int toheight = height;
  8. //原始图片写入画布坐标和宽高(用来设置裁减溢出部分)
  9. int x = 0;
  10. int y = 0;
  11. int ow = originalImage.Width;
  12. int oh = originalImage.Height;
  13. //原始图片画布,设置写入缩略图画布坐标和宽高(用来原始图片整体宽高缩放)
  14. int bg_x = 0;
  15. int bg_y = 0;
  16. int bg_w = towidth;
  17. int bg_h = toheight;
  18. //倍数变量
  19. double multiple = 0;
  20. //获取宽长的或是高长与缩略图的倍数
  21. if (originalImage.Width >= originalImage.Height)
  22. multiple = (double)originalImage.Width / (double)width;
  23. else
  24. multiple = (double)originalImage.Height / (double)height;
  25. //上传的图片的宽和高小等于缩略图
  26. if (ow <= width && oh <= height)
  27. {
  28. //缩略图按原始宽高
  29. bg_w = originalImage.Width;
  30. bg_h = originalImage.Height;
  31. //空白部分用背景色填充
  32. bg_x = Convert.ToInt32(((double)towidth - (double)ow) / 2);
  33. bg_y = Convert.ToInt32(((double)toheight - (double)oh) / 2);
  34. }
  35. //上传的图片的宽和高大于缩略图
  36. else
  37. {
  38. //宽高按比例缩放
  39. bg_w = Convert.ToInt32((double)originalImage.Width / multiple);
  40. bg_h = Convert.ToInt32((double)originalImage.Height / multiple);
  41. //空白部分用背景色填充
  42. bg_y = Convert.ToInt32(((double)height - (double)bg_h) / 2);
  43. bg_x = Convert.ToInt32(((double)width - (double)bg_w) / 2);
  44. }
  45. //新建一个bmp图片,并设置缩略图大小.
  46. System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
  47. //新建一个画板
  48. System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
  49. //设置高质量插值法
  50. g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
  51. //设置高质量,低速度呈现平滑程度
  52. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
  53. //清空画布并设置背景色
  54. g.Clear(System.Drawing.ColorTranslator.FromHtml("#F2F2F2"));
  55. //在指定位置并且按指定大小绘制原图片的指定部分
  56. //第一个System.Drawing.Rectangle是原图片的画布坐标和宽高,第二个是原图片写在画布上的坐标和宽高,最后一个参数是指定数值单位为像素
  57. g.DrawImage(originalImage, new System.Drawing.Rectangle(bg_x, bg_y, bg_w, bg_h), new System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel);
  58. try
  59. {
  60. //获取图片类型
  61. string fileExtension = System.IO.Path.GetExtension(originalImagePath).ToLower();
  62. //按原图片类型保存缩略图片,不按原格式图片会出现模糊,锯齿等问题.
  63. switch (fileExtension)
  64. {
  65. case ".gif": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Gif); break;
  66. case ".jpg": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg); break;
  67. case ".bmp": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Bmp); break;
  68. case ".png": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Png); break;
  69. }
  70. }
  71. catch (System.Exception e)
  72. {
  73. throw e;
  74. }
  75. finally
  76. {
  77. originalImage.Dispose();
  78. bitmap.Dispose();
  79. g.Dispose();
  80. }
  81. }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马