开源免费的.NET图像即时处理的组件ImageProcessor

      2020-09-17 01:46      HTML5

承接以前的组件系列,这个组件系列旨在介绍.NET相关的组件,让大家可以在项目中有一个更好的选择,社区对于第三方插件的介绍还是比较少的,很多博文的内容主要还是介绍一些简单的操作(很多人都说博客园现在是“hello world”的水平,博文质量在下降,对于这一说法,我觉得这个说法有些过头了,可能一些博文的确写的比较初级,但是很多博文的深入还是比较大,只是很少受人关注),这个组件系列主要在介绍一些功能的组件,附带该组件的核心对象介绍。

组件的介绍绝对不是一篇文章可以叙述完的,因为一个组件是经过开发者很长周期的开发,绝不是我这里一篇简单的博文就可以介绍完毕的,组件介绍的系列,一般会沿袭着组件背景介绍、组件使用介绍、核心对象介绍等等内容。如果对组件感兴趣,可以深入的了解和学习。

废话少说,进入正题。

我们在项目中很多时候都会对文件进行处理,例如文件的上传下载等等。其中对图片的实时操作也会较多,在这里介绍一款用C#编写的轻量级库的集合,它允许你使用.NET 4.5+来动态地处理图像的组件,那就是ImageProcessor,用于图像的即时处理的.NET库。(组织的开源项目组,会经过第一个项目的磨合后,第二项目会开发一个.NET Core组件)

一.ImageProcessor组件概述

ImageProcessor是用C#编写的轻量级库的集合,它允许你使用.NET 4.5+来动态地处理图像,包括两个主库ImageProcessor(用于桌面和应用程序使用)ImageProcessor.Web(ASP.NET构建的动态图像处理扩展),该组件快速,可扩展,易于使用,捆绑了一些很强大的功能,而且是完全开源。该组件有两个部分,我们今天将主要讲解ImageProcessor部分的内容,如果对另外一个感兴趣,可以自行了解。

ImageProcessor.Web向项目添加了一个可配置的HttpModule,允许对图像文件进行即时处理。该模块还提供了一个基于文件和浏览器的缓存,可以处理数百万的图像,增加处理输出和节省宝贵的服务器内存。该组件的功能方法包括:调整大小,旋转,圆角,翻转,裁剪,水印,过滤器,饱和度,亮度,对比度,质量,格式,小插曲,高斯模糊,高斯锐化和透明度。

ImageProcessor.Web的当前版本是4.8.2,可以下载源码和DLL文件(本人建议最好下载源码,好处就不在这里赘述)。

安装ImageProcessor.Web时,默认情况下,Web.config中添加配置节点,如下节点。

<add name=type=/></httpModules>

这允许库ImageProcessingModule拦截本地图像处理请求。ImageProcessor.Web是高度可配置的。可以将其他配置文件添加到解决方案中,以便从多个来源检索,处理和缓存图像。对于该组件的配置设置可以查看文档。

二.ImageProcessor组件操作概述

介绍了组件的相关信息,在这里介绍一下该组件的操作实例。ImageFactory类提供了对给定图像执行各种操作功能的方法。它经过精心设计以防止在以高性能方式处理图像时通常发生的各种内存泄漏。这使其可以安全地在桌面和Web环境中使用。ImageFactory自动检测给定图像的正确文件类型,并且该类的API是流畅的,这允许您轻松地链接方法以提供所需的输出。例如,以下代码加载,调整大小,设置新格式并保存包含图像信息的MemoryStream。

Image(string file){if (string.IsNullOrEmpty(file)){throw new ArgumentNullException(file);}byte[] photoBytes = System.IO.File.ReadAllBytes(file);// 检测格式ISupportedImageFormat format = new JpegFormat { Quality = 70 };Size size = new Size(150, 0);using (MemoryStream inStream = new MemoryStream(photoBytes)){using (MemoryStream outStream = new MemoryStream()){(ImageFactory imageFactory = new ImageFactory(true)){// 加载,调整大小,设置格式和质量并保存图像。imageFactory.Load(inStream).Resize(size).Format(format).Save(outStream);//对获取的imageFactory对象进行对应的操作}//对获取的数据流进行操作}}

对于图片的操作,具体有较多的操作方式,具体的方法有如下的方法:

方法名称方法操作说明

Reset将当前图像重置为其原始加载状态

Alpha更改当前图像的不透明度

AutoRotate执行自动旋转以确保反映EXIF定义的旋转最终图像

BitDepth改变当前图像的位深度

Brightness更改当前图像的亮度

BackgroundColor更改当前图像的背景颜色

Constrain约束当前图像,调整其大小以适合给定的尺寸,同时保持其纵横比

Contrast更改当前图像的对比度

Crop将当前图像裁剪到给定的位置和大小

DetectEdges检测当前图像中的边缘

Resolution设置图像的分辨率

EntropyCrop将图像修剪到最大熵的区域

Filter将过滤器应用于当前图像

Flip水平或垂直翻转当前图像

Gamma调整给定图像的灰度(光强度)分量

GaussianBlur使用高斯内核模糊当前图像

Hue改变当前图像的色调,改变整体颜色

Halftone将当前图像转换为该图像的CMYK半色调表示

Quality改变当前图像的输出质量

ReplaceColor替换当前图像中的颜色

Resize将当前图像调整为给定尺寸

Rotate将当前图像旋转给定角度

以上只是列出了一些主要的操作方法,还有其他的方法这里就不再介绍,有兴趣可以自己取实践。下面就介绍一下一些核心对象。

三.ImageProcessor核心对象解析

解析来我们具体了解一下核心的方法和属性,看看源码还是有好处。

1.ImageFactory.Load()