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

相关文章

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

c++中std::placeholders的使用方法

《c++中std::placeholders的使用方法》std::placeholders是C++标准库中的一个工具,用于在函数对象绑定时创建占位符,本文就来详细的介绍一下,具有一定的参考价值,感兴... 目录1. 基本概念2. 使用场景3. 示例示例 1:部分参数绑定示例 2:参数重排序4. 注意事项5.

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

树莓派启动python的实现方法

《树莓派启动python的实现方法》本文主要介绍了树莓派启动python的实现方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、RASPBerry系统设置二、使用sandroidsh连接上开发板Raspberry Pi三、运

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法