C#生成缩略图不失真的方法

2024-05-04 02:18

本文主要是介绍C#生成缩略图不失真的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近一个手持机项目有个需求,因为物料图片的大小不一,有的很大显示到手持机上会只显示图片的一部分,界面显得非常乱,很影响客户的体验度。所以需要一个方法,将上传到服务器上的图片进行处理,按照一定的大小格式进行保存。

下面提供了两种获取图片缩略图的方法,供大家参考。

方法一:通过调用Image对象的自带方法GetThumbnailImage()进行图片转换

        /// <summary>/// 生成缩略图重载方法,返回缩略图的Image对象/// </summary>/// <param name="width">缩略图的宽度</param>/// <param name="height">缩略图的高度</param>/// <param name="imageFrom">原Image对象</param>/// <returns>缩略图的Image对象</returns>public Image GetReducedImage2(int width, int height, Image imageFrom){// 源图宽度及高度 int imageFromWidth = imageFrom.Width;int imageFromHeight = imageFrom.Height;try{// 生成的缩略图实际宽度及高度.如果指定的高和宽比原图大,则返回原图;否则按照指定高宽生成图片if (width >= imageFromWidth && height >= imageFromHeight){return imageFrom;}else{Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(() => { return false; });//调用Image对象自带的GetThumbnailImage()进行图片缩略Image reducedImage = imageFrom.GetThumbnailImage(width, height, callb, IntPtr.Zero);//将图片以指定的格式保存到到指定的位置reducedImage.Save(@"E:\640x480.png", ImageFormat.Png);return reducedImage;}}catch (Exception){//抛出异常throw new Exception("转换失败,请重试!");}}

方法二:采用双三次插值法,执行预筛选以确保高质量的收缩,此模式可产生质量教高的转换图像。

        /// <summary>/// 按照指定的高和宽生成相应的规格的图片,采用此方法生成的缩略图片不会失真/// </summary>/// <param name="width">指定宽度</param>/// <param name="height">指定高度</param>/// <param name="imageFrom">原图片</param>/// <returns>返回新生成的图</returns>public static Image GetReducedImage(int width, int height, Image imageFrom){// 源图宽度及高度 int imageFromWidth = imageFrom.Width;int imageFromHeight = imageFrom.Height;// 生成的缩略图实际宽度及高度.如果指定的高和宽比原图大,则返回原图;否则按照指定高宽生成图片if (width >= imageFromWidth && height >= imageFromHeight){return imageFrom;}else{// 生成的缩略图在上述"画布"上的位置int X = 0;int Y = 0;// 创建画布Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);bmp.SetResolution(imageFrom.HorizontalResolution, imageFrom.VerticalResolution);using (Graphics g = Graphics.FromImage(bmp)){// 用白色清空 g.Clear(Color.White);// 指定高质量的双三次插值法。执行预筛选以确保高质量的收缩。此模式可产生质量最高的转换图像。 g.InterpolationMode = InterpolationMode.HighQualityBicubic;// 指定高质量、低速度呈现。 g.SmoothingMode = SmoothingMode.HighQuality;// 在指定位置并且按指定大小绘制指定的 Image 的指定部分。 g.DrawImage(imageFrom, new Rectangle(X, Y, width, height),new Rectangle(0, 0, imageFromWidth, imageFromHeight), GraphicsUnit.Pixel);//将图片以指定的格式保存到到指定的位置bmp.Save(@"E:\640x480.png", ImageFormat.Png);return bmp;}}}

先分享这两种方法,大家可以尝试。

这篇关于C#生成缩略图不失真的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958139

相关文章

Python清空Word段落样式的三种方法

《Python清空Word段落样式的三种方法》:本文主要介绍如何用python-docx库清空Word段落样式,提供三种方法:设置为Normal样式、清除直接格式、创建新Normal样式,注意需重... 目录方法一:直接设置段落样式为"Normal"方法二:清除所有直接格式设置方法三:创建新的Normal样

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也