经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
c# 生成自定义图片
来源:cnblogs  作者:薛定谔家的猫  时间:2018/10/15 9:30:41  对本文有异议
  1. using System.Drawing;
  2. using System.IO;
  3. using System.Drawing.Imaging;
  4. using System;
  5. namespace treads
  6. {
  7. /// <summary>
  8. /// 生成略缩图
  9. /// </summary>
  10. public class Class2
  11. {
  12. private Image srcImage;
  13. private string srcFileName= @"X";//获取图片的路径
  14. private string srcFileName1 = @"x";//要保持图片的新路径
  15.  
  16. /// <summary>
  17. /// 回调
  18. /// </summary>
  19. /// <returns></returns>
  20. public bool ThumbnailCallback()
  21. {
  22. return false;
  23. }
  24. /// <summary>
  25. /// 保存缩略图
  26. /// </summary>
  27. /// <param name="Width"></param>
  28. /// <param name="Height"></param>
  29. public void SaveThumbnailImage(int Width, int Height)
  30. {
  31. switch (Path.GetExtension(srcFileName).ToLower())
  32. {
  33. case ".png":
  34. SaveImage(Width, Height, ImageFormat.Png);
  35. break;
  36. case ".gif":
  37. SaveImage(Width, Height, ImageFormat.Gif);
  38. break;
  39. default:
  40. SaveImage(Width, Height, ImageFormat.Jpeg);
  41. break;
  42. }
  43. }
  44. /// <summary>
  45. /// 生成缩略图并保存
  46. /// </summary>
  47. /// <param name="Width">缩略图的宽度</param>
  48. /// <param name="Height">缩略图的高度</param>
  49. /// <param name="imgformat">保存的图像格式</param>
  50. /// <returns>缩略图的Image对象</returns>
  51. public void SaveImage(int Width, int Height, ImageFormat imgformat)
  52. {
  53. srcImage = Image.FromFile(srcFileName);
  54. if (imgformat != ImageFormat.Gif && (srcImage.Width > Width) || (srcImage.Height > Height))
  55. {
  56. Image img;
  57. Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
  58. img = srcImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);
  59. srcImage.Dispose();
  60. img.Save(srcFileName1, imgformat);
  61. img.Dispose();
  62. }
  63. }
  64. }
  65. }

 制作网络下载的略缩图

  1. /// <summary>
  2. /// 制作远程缩略图
  3. /// </summary>
  4. /// <param name="url">图片URL</param>
  5. /// <param name="newFileName">新图路径</param>
  6. /// <param name="maxWidth">最大宽度</param>
  7. /// <param name="maxHeight">最大高度</param>
  8. public static void MakeRemoteThumbnailImage(string url, string newFileName, int maxWidth, int maxHeight)
  9. {
  10. Stream stream = GetRemoteImage(url);
  11. if (stream == null)
  12. return;
  13. Image original = Image.FromStream(stream);
  14. stream.Close();
  15. MakeThumbnailImage(original, newFileName, maxWidth, maxHeight);
  16. }
  17. /// <summary>
  18. /// 获取图片流
  19. /// </summary>
  20. /// <param name="url">图片URL</param>
  21. /// <returns></returns>
  22. private static Stream GetRemoteImage(string url)
  23. {
  24. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
  25. request.Method = "GET";
  26. request.ContentLength = 0;
  27. request.Timeout = 20000;
  28. HttpWebResponse response = null;
  29. try
  30. {
  31. response = (HttpWebResponse)request.GetResponse();
  32. return response.GetResponseStream();
  33. }
  34. catch
  35. {
  36. return null;
  37. }
  38. }
  39. /// <summary>
  40. /// 裁剪图片并保存
  41. /// </summary>
  42. /// <param name="fileName">源图路径(绝对路径)</param>
  43. /// <param name="newFileName">缩略图路径(绝对路径)</param>
  44. /// <param name="maxWidth">缩略图宽度</param>
  45. /// <param name="maxHeight">缩略图高度</param>
  46. /// <param name="cropWidth">裁剪宽度</param>
  47. /// <param name="cropHeight">裁剪高度</param>
  48. /// <param name="X">X轴</param>
  49. /// <param name="Y">Y轴</param>
  50. public static bool MakeThumbnailImage(string fileName, string newFileName, int maxWidth, int maxHeight, int cropWidth, int cropHeight, int X, int Y)
  51. {
  52. byte[] imageBytes = File.ReadAllBytes(fileName);
  53. Image originalImage = Image.FromStream(new System.IO.MemoryStream(imageBytes));
  54. Bitmap b = new Bitmap(cropWidth, cropHeight);
  55. try
  56. {
  57. using (Graphics g = Graphics.FromImage(b))
  58. {
  59. //设置高质量插值法
  60. g.InterpolationMode = InterpolationMode.HighQualityBicubic;
  61. //设置高质量,低速度呈现平滑程度
  62. g.SmoothingMode = SmoothingMode.AntiAlias;
  63. g.PixelOffsetMode = PixelOffsetMode.HighQuality;
  64. //清空画布并以透明背景色填充
  65. g.Clear(Color.Transparent);
  66. //在指定位置并且按指定大小绘制原图片的指定部分
  67. g.DrawImage(originalImage, new Rectangle(0, 0, cropWidth, cropHeight), X, Y, cropWidth, cropHeight, GraphicsUnit.Pixel);
  68. Image displayImage = new Bitmap(b, maxWidth, maxHeight);
  69. SaveImage(displayImage, newFileName, GetCodecInfo("image/" + GetFormat(newFileName).ToString().ToLower()));
  70. return true;
  71. }
  72. }
  73. catch (System.Exception e)
  74. {
  75. throw e;
  76. }
  77. finally
  78. {
  79. originalImage.Dispose();
  80. b.Dispose();
  81. }
  82. }

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号