C# 图片处理生成缩略图
2022/5/26 1:52:53
本文主要是介绍C# 图片处理生成缩略图,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
缩略图通常是将图片内容进行一定的缩小展现,或裁剪展现,主要有两个目的,一是提供一定的预览功能,二是节省屏幕展示空间、节省流量。
在网站中我们通常运用在商品的列表,比如商城、图书、新闻等等列表的图片。在C#中我们如何生成缩略图呢,也就是缩小图片,下面我们来看一看如何缩小图片。
其中方法参数如下:
originalImagePath:源图路径(物理路径)
thumbnailPath:缩略图路径(物理路径)
width:生成缩略图宽度
height:生成缩略图高度
mode:生成缩略图的模式
public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, ThumbnailMode mode) { System.Drawing.Image img_OriginalImage = null; ImageFormat tFormat = null; try { img_OriginalImage = (Bitmap)System.Drawing.Image.FromFile(originalImagePath); tFormat = img_OriginalImage.RawFormat; } catch (Exception ex) { if (img_OriginalImage != null) { img_OriginalImage.Dispose(); } Const.iErrorCount++; throw new Exception("压缩图片:" + originalImagePath + "失败!\r\n" + ex.Message); } int i_ToWidth = width; int i_ToHeight = height; int x = 0; int y = 0; int i_OriginalWidth = img_OriginalImage.Width; int i_OriginalHeight = img_OriginalImage.Height; switch (mode) { case ThumbnailMode.Width: i_ToHeight = img_OriginalImage.Height * width / img_OriginalImage.Width; break; case ThumbnailMode.Height: i_ToWidth = img_OriginalImage.Width * height / img_OriginalImage.Height; break; case ThumbnailMode.Cut: if ((double)img_OriginalImage.Width / (double)img_OriginalImage.Height > (double)i_ToWidth / (double)i_ToHeight) { i_OriginalHeight = img_OriginalImage.Height; i_OriginalWidth = img_OriginalImage.Height * i_ToWidth / i_ToHeight; y = 0; x = (img_OriginalImage.Width - i_OriginalWidth) / 2; } else { i_OriginalWidth = img_OriginalImage.Width; i_OriginalHeight = img_OriginalImage.Width * height / i_ToWidth; x = 0; y = (img_OriginalImage.Height - i_OriginalHeight) / 2; } break; default: break; } //新建一个BMP图片 System.Drawing.Image img_BitMap = new System.Drawing.Bitmap(i_ToWidth, i_ToHeight); //新建一个画板 System.Drawing.Graphics gp = Graphics.FromImage(img_BitMap); //设置高质量插值法 gp.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; //设置高质量、低速度呈现平滑程度 gp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; gp.CompositingQuality = CompositingQuality.HighQuality; //清空画布并以透明背景色填充 gp.Clear(Color.Transparent); //指定位置并按大小绘制原图片的指定部分 gp.DrawImage(img_OriginalImage, new Rectangle(0, 0, i_ToWidth, i_ToHeight), new Rectangle(x, y, i_OriginalWidth, i_OriginalHeight), GraphicsUnit.Pixel); try { EncoderParameters ep = new EncoderParameters(); long[] qy = new long[1]; qy[0] = 100;//设置压缩的比例1-100 EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy); ep.Param[0] = eParam; ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders(); ImageCodecInfo jpegICIinfo = null; for (int i = 0; i < arrayICI.Length; i++) { if (arrayICI[i].FormatDescription.Equals("JPEG")) { jpegICIinfo = arrayICI[i]; break; } } if (jpegICIinfo != null && Equals(tFormat, ImageFormat.Jpeg)) { //以JPG格式保存图片 img_BitMap.Save(thumbnailPath, jpegICIinfo, ep); //Const.iSuccessCount++; } else { img_BitMap.Save(thumbnailPath, tFormat); //Const.iSuccessCount++; } } catch (Exception ex) { LogManager.WriteLog("复制图片:" + originalImagePath + "失败!\r\n" + ex.Message + ex.StackTrace); Const.iErrorCount++; throw; } finally { if (img_OriginalImage != null) { img_OriginalImage.Dispose(); } if (img_BitMap != null) { img_BitMap.Dispose(); } if (gp != null) { gp.Dispose(); } //GC.Collect(); } }
- 在该方法中我们首先使用(Bitmap)System.Drawing.Image.FromFile将文件加载到bitmap。
- 根据mode传入的压缩模式进行原始绘图区域的计算。
- 将计算出的区域绘制到新的BitMap。
- 将绘制的BitMap图片保存到指定文件。
通过如上的几步就完成了缩略图的生成。
这篇关于C# 图片处理生成缩略图的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#