如何保持上传图片文件的质量?

时间:2019-02-23 13:04:51

标签: c# asp.net-mvc asp.net-mvc-4

我有一个使用C#语言的asp.net MVC 5应用程序,并且其中一个网页使用户可以上载具有不同纵横比的不同尺寸的图像文件。

上载的图像文件将显示在另一个具有固定尺寸的网页上:w = 130px和height = 23px,以及HTML img标签,例如<img src="xyz..." style="width:130px; height:23px" />

当用户原始图像固定大小(130px x 23px)和宽高比5.65(即130/23)时,如何使用特定的逻辑或算法编写C#代码以将上传的图像文件保存在服务器上文件具有不同的尺寸和宽高比?上传的图像质量应该很好。

请参阅所附的屏幕截图。最上面的蓝色图像是用户的原始图像文件,它们具有不同的尺寸和纵横比。底部红色图像是上传到服务器的具有固定尺寸和纵横比的图像文件。

enter image description here

图像文件可以是png,gif,jpg,bmp。

谢谢。

1 个答案:

答案 0 :(得分:0)

调整图像大小时始终会失去质量,除非它是矢量图形。可悲的是,大多数情况下它们不是矢量图形。

升级

如果说您有一个5px×5px的图像,并且想要将其放大到10px×10px,那么75个新像素将来自哪里?没错,需要以某种方式进行弥补。存在对这些新像素进行化妆的不同算法,例如最近邻居,双线性,双三次等。某些工具甚至具有锐化功能。

降级

如果您的图片大小为5px×5px,并且要将其缩小为2px×2px,则会丢失21个像素。

更多信息

因此,您总是会失去质量,但是可以使用一些技巧使它看起来像没有丢失或增加任何像素。要记住的一个简单规则是永远不要超过300%,否则您将开始注意到质量损失。另外,最好从较大的图片开始,因此请用户上传较大的图片,然后再进行缩小。

我使用名为ImageResizer的c#库进行大小调整。它以NuGet软件包的形式提供。

  

Essential版的ImageResizer v4核心库和18个插件是免费的,并根据Apache 2许可证开源。

请参阅许可中的overview

如果您对算法感兴趣,请参阅this文章。