开源免费的,NET图像即时处理的零部件ImageProcessor

 
 承接从前的机件种类,这么些组件连串目的在于介绍.NET相关的零件,让大家能够在品种中有叁个更好的挑三拣四,社区对此第二方插件的介绍照旧相比少的,很多博文的始末根本依然介绍部分简练的操作(很多少人都说微博将来是“hello
world”的品位,博文品质在降低,对于那一说法,笔者以为那么些说法有个别过度了,恐怕有个别博文的确写的可比初级,但是不少博文的深透依然相比大,只是很少受人关怀),这么些组件类别首要在介绍部分效益的组件,附带该零件的大旨目的介绍。

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

 
 承接之前的组件体系,那个组件种类意在介绍.NET相关的零部件,让我们能够在类型中有3个更好的选料,社区对此第一方插件的牵线照旧相比较少的,很多博文的剧情根本依旧介绍1些大致的操作(很六人都说天涯论坛今后是“hello
world”的品位,博文品质在下降,对于那1说法,小编觉着那几个说法有个别过分了,可能有个别博文的确写的相比初级,可是洋洋博文的尖锐还是比较大,只是很少受人关切),这些组件连串首要在介绍部分效果的机件,附带该器件的大旨指标介绍。

 
 组件的牵线相对不是一篇小说能够描述完的,因为几个零件是透过开发者不短周期的支出,绝不是作者这边壹篇不难的博文就能够介绍完结的,组件介绍的多重,1般会沿袭着组件背景介绍、组件使用介绍、主旨目的介绍等等内容。即使对组件感兴趣,能够深深的刺探和读书。

   废话少说,进入正题。

 
 大家在类型中过多时候都会对文件进行处理,例如文件的上传下载等等。个中对图片的实时操作也会较多,在那边介绍壹款用C#编写的轻量级库的聚集,它同意你使用.NET
四.伍+来动态地处理图像的零件,那就是ImageProcessor,用于图像的即时处理的.NET库。(组织的开源项目组,会通过第二个类别的磨合后,第一种类会支出一个.NET
Core组件)

 
 组件的牵线相对不是壹篇作品能够描述完的,因为一个零件是透过开发者相当短周期的支出,绝不是本身那边壹篇简单的博文就能够介绍完结的,组件介绍的接贰连叁串,一般会沿袭着组件背景介绍、组件使用介绍、主题指标介绍等等剧情。借使对组件感兴趣,能够深远的刺探和学习。

一.ImageProcessor组件概述

 
  ImageProcessor是用C#编写的轻量级库的会面,它同意你使用.NET
四.5+来动态地拍卖图像,包含多少个主库ImageProcessor(用于桌面和应用程序使用)ImageProcessor.Web(ASP.NET营造的动态图像处理扩张),该零件火速,可扩大,易于使用,捆绑了一些很强劲的效能,而且是完全开源。该零件有多个部分,我们今天将珍视讲解ImageProcessor部分的剧情,固然对别的一个感兴趣,可以自行领悟。

 
 ImageProcessor.Web向项目添加了1个可配置的HttpModule,允许对图像文件举办即时处理。该模块还提供了三个依据文件和浏览器的缓存,能够处理数百万的图像,扩张拍卖输出和节省宝贵的服务器内存。该零件的功用方法包蕴:调整大小,旋转,圆角,翻转,裁剪,水印,过滤器,饱和度,亮度,对比度,品质,格式,小插曲,高斯模糊,高斯锐化和发光度。

 
 ImageProcessor.Web的如今版本是四.八.二,能够下载源码和DLL文件(自个儿提议最佳下载源码,好处就不在那里赘述)。

   ImageProcessor.Web是ImageProcessor的Web扩张,允许开发职员使用Url
API的查询字符串参数作为指令执行图像操作。此进度的出口是惊人优化的互连网,以保障web项目较高的属性。安装ImageProcessor.Web时,暗中同意情状下,Web.config中拉长配置节点,如下节点。

<add name="ImageProcessorModule" type="ImageProcessor.Web.HttpModules.ImageProcessingModule, ImageProcessor.Web" /></httpModules>

   
那允许库ImageProcessingModule拦截本地图像处理请求。ImageProcessor.Web是可观可安顿的。可以将别的布置文件添加到消除方案中,以便从八个出自检索,处理和缓存图像。对于该器件的安排安装能够查看文书档案。

   废话少说,进入正题。

二.ImageProcessor组件操作概述

 
介绍了组件的有关新闻,在此地介绍一下该器件的操作实例。ImageFactory类提供了对给定图像执行种种操作功效的艺术。它通过精心设计以防范在以高品质格局处理图像时平时爆发的各类内部存款和储蓄器泄漏。那使其能够高枕无忧地在桌面和Web环境中央银行使。ImageFactory自动物检疫查实验给定图像的不易文件类型,并且该类的API是顺理成章的,那允许你轻松地链接方法以提供所需的出口。例如,以下代码加载,调整大小,设置新格式并保存包涵图像消息的MemoryStream。

  public static void 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以保留EXIF元数据。
                    using (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 将当前图像旋转给定角度

   
以上只是列出了有些关键的操作方法,还有其余的艺术那里就不再介绍,有趣味能够团结取实践。上面就介绍一下部分为主目的。

 
 大家在品种中很多时候都会对文本举办处理,例如文件的上传下载等等。当中对图片的实时操作也会较多,在那里介绍1款用C#编写的轻量级库的集合,它同意你使用.NET
四.5+来动态地处理图像的机件,那正是ImageProcessor,用于图像的即时处理的.NET库。(组织的开源项目组,会透过第2个品类的磨合后,第二类型会开发三个.NET
Core组件)

三.ImageProcessor大旨对象解析

    解析来大家切实理解一下骨干的办法和性质,看看源码依旧有好处。

一.ImageProcessor组件概述

 
  ImageProcessor是用C#编写的轻量级库的聚合,它同意你使用.NET
4.5+来动态地拍卖图像,包罗五个主库ImageProcessor(用于桌面和应用程序使用)ImageProcessor.Web(ASP.NET构建的动态图像处理扩充),该零件快捷,可扩大,易于使用,捆绑了部分很强大的成效,而且是全然开源。该器件有七个部分,大家后天将重点教学ImageProcessor部分的内容,若是对其它1个感兴趣,能够活动掌握。

 
 ImageProcessor.Web向品种添加了2个可安插的HttpModule,允许对图像文件进行即时处理。该模块还提供了多个遵照文件和浏览器的缓存,能够拍卖数百万的图像,扩展处理输出和节约宝贵的服务器内部存款和储蓄器。该器件的职能方法包涵:调整大小,旋转,圆角,翻转,裁剪,水印,过滤器,饱和度,亮度,比较度,品质,格式,小插曲,高斯模糊,高斯锐化和发光度。

 
 ImageProcessor.Web的此时此刻版本是四.八.二,能够下载源码和DLL文件(本身提议最佳下载源码,好处就不在那里赘述)。

   ImageProcessor.Web是ImageProcessor的Web扩大,允许开发职员使用Url
API的询问字符串参数作为指令执行图像操作。此进度的出口是可观优化的互联网,以保障web项目较高的天性。安装ImageProcessor.Web时,暗中认可意况下,Web.config中丰裕配置节点,如下节点。

<add name="ImageProcessorModule" type="ImageProcessor.Web.HttpModules.ImageProcessingModule, ImageProcessor.Web" /></httpModules>

   
那允许库ImageProcessingModule拦截本地图像处理请求。ImageProcessor.Web是高度可配置的。能够将别的布署文件添加到化解方案中,以便从多个出自检索,处理和缓存图像。对于该器件的配备安装能够查阅文档。

  1.ImageFactory.Load()

 public ImageFactory Load(string imagePath)
        {
            FileInfo fileInfo = new FileInfo(imagePath);
            if (fileInfo.Exists)
            {
                this.ImagePath = imagePath;
                using (FileStream fileStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
                {
                    ISupportedImageFormat format = FormatUtilities.GetFormat(fileStream);
                    if (format == null)
                    {
                        throw new ImageFormatException("Input stream is not a supported format.");
                    }
                    MemoryStream memoryStream = new MemoryStream();
                    fileStream.CopyTo(memoryStream);
                    memoryStream.Position = 0;
                    this.Image = format.Load(memoryStream);
                    this.CurrentBitDepth = Image.GetPixelFormatSize(this.Image.PixelFormat);
                    this.InputStream = memoryStream;
                    format.Quality = DefaultQuality;
                    format.IsIndexed = FormatUtilities.IsIndexed(this.Image);
                    this.backupFormat = format;
                    this.CurrentImageFormat = format;
                    foreach (PropertyItem propertyItem in this.Image.PropertyItems)
                    {
                        this.ExifPropertyItems[propertyItem.Id] = propertyItem;
                    }
                    this.backupExifPropertyItems = this.ExifPropertyItems;
                    IAnimatedImageFormat imageFormat = this.CurrentImageFormat as IAnimatedImageFormat;
                    if (imageFormat != null)
                    {
                        imageFormat.AnimationProcessMode = this.AnimationProcessMode;
                    }
                    Image formatted = this.Image.Copy(this.AnimationProcessMode);
                    this.Image.Dispose();
                    this.Image = formatted;
                    this.ShouldProcess = true;
                }
            }
            else
            {
                throw new FileNotFoundException(imagePath);
            }
            return this;
        }

   该办法用来加载要拍卖的图像的措施,
始终首先调用此格局。该格局具有伍个重载版本,分别接收的参数为string,byte[],Image,Stream。FormatUtilities.GetFormat(fileStream)方法从给定流获取科学的ISupportedImageFormat。在对图片的多少流实行操作时,首先会复制图片的流数据。format.Load(memoryStream)将我们的影象设置为内部存款和储蓄器流值。图片数据流举行二个操作后,会调用Image.Copy(this.AnimationProcessMode)确定保障图像是最得力的格式。

二.ImageProcessor组件操作概述

 
介绍了组件的有关音讯,在此地介绍一下该器件的操作实例。ImageFactory类提供了对给定图像执行各种操作效用的主意。它通过精心设计以免患在以高质量格局处理图像时经常发生的各样内部存款和储蓄器泄漏。那使其得以高枕无忧地在桌面和Web环境中运用。ImageFactory自动物检疫查评定给定图像的不错文件类型,并且该类的API是流畅的,那允许你轻松地链接方法以提供所需的出口。例如,以下代码加载,调整大小,设置新格式并保留包罗图像新闻的MemoryStream。

  public static void 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以保留EXIF元数据。
                    using (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 将当前图像旋转给定角度

   
以上只是列出了有个别要害的操作方法,还有其它的主意那里就不再介绍,有趣味能够自己取实践。上边就介绍一下片段骨干指标。

   2.ImageFactoryExtensions.AutoProcess() 

 internal static ImageFactory AutoProcess(this ImageFactory factory, IWebGraphicsProcessor[] graphicsProcessors)
        {
            if (factory.ShouldProcess)
            {
                foreach (IWebGraphicsProcessor graphicsProcessor in graphicsProcessors)
                {
                    factory.CurrentImageFormat.ApplyProcessor(graphicsProcessor.Processor.ProcessImage, factory);
                    IDisposable disposable = graphicsProcessor.Processor.DynamicParameter as IDisposable;
                    disposable?.Dispose();
                }
            }
            return factory;
        }

   
 ImageFactoryExtensions类是ImageFactory类的恢弘类,首就算扩展Web项目。AutoProcess()方法基于添加到图像路径的其余查询字符串参数,自动处理图像文件。graphicsProcessors参数表示要选用的图片处理器阵列。graphicsProcessor.Processor.DynamicParameter
as IDisposable打开动态参数并拍卖别的须要它的花色。

3.ImageProcessor主旨对象解析

    解析来我们具体驾驭一下骨干的点子和总体性,看看源码依旧有便宜。

   3.ImageProcessingModule.SetHeaders()

 public static void SetHeaders(HttpContext context, int maxDays)
        {
            object responseTypeObject = context.Items[CachedResponseTypeKey];
            object dependencyFileObject = context.Items[CachedResponseFileDependency];
            string responseType = responseTypeObject as string;
            string[] dependencyFiles = dependencyFileObject as string[];
            SetHeaders(context, responseType, dependencyFiles, maxDays);
        }

   
 在Web扩张中,ImageProcessingModule类比较主要,处理Web应用程序中的任何图像请求。SetHeaders()方法使浏览器和服务器将出口保存在其缓存中,从而增强质量。该办法接受八个参数,context表示请求的http音信对象,HttpContext对象对内在服务器对象的引用。maxDays参数表示将图片存款和储蓄在浏览器缓存中的最长天数。

  1.ImageFactory.Load()

 public ImageFactory Load(string imagePath)
        {
            FileInfo fileInfo = new FileInfo(imagePath);
            if (fileInfo.Exists)
            {
                this.ImagePath = imagePath;
                using (FileStream fileStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
                {
                    ISupportedImageFormat format = FormatUtilities.GetFormat(fileStream);
                    if (format == null)
                    {
                        throw new ImageFormatException("Input stream is not a supported format.");
                    }
                    MemoryStream memoryStream = new MemoryStream();
                    fileStream.CopyTo(memoryStream);
                    memoryStream.Position = 0;
                    this.Image = format.Load(memoryStream);
                    this.CurrentBitDepth = Image.GetPixelFormatSize(this.Image.PixelFormat);
                    this.InputStream = memoryStream;
                    format.Quality = DefaultQuality;
                    format.IsIndexed = FormatUtilities.IsIndexed(this.Image);
                    this.backupFormat = format;
                    this.CurrentImageFormat = format;
                    foreach (PropertyItem propertyItem in this.Image.PropertyItems)
                    {
                        this.ExifPropertyItems[propertyItem.Id] = propertyItem;
                    }
                    this.backupExifPropertyItems = this.ExifPropertyItems;
                    IAnimatedImageFormat imageFormat = this.CurrentImageFormat as IAnimatedImageFormat;
                    if (imageFormat != null)
                    {
                        imageFormat.AnimationProcessMode = this.AnimationProcessMode;
                    }
                    Image formatted = this.Image.Copy(this.AnimationProcessMode);
                    this.Image.Dispose();
                    this.Image = formatted;
                    this.ShouldProcess = true;
                }
            }
            else
            {
                throw new FileNotFoundException(imagePath);
            }
            return this;
        }

   该办法用来加载要拍卖的图像的法子,
始终首先调用此格局。该格局具有几个重载版本,分别接收的参数为string,byte[],Image,Stream。FormatUtilities.GetFormat(fileStream)方法从给定流获取科学的ISupportedImageFormat。在对图纸的多少流进行操作时,首先会复制图片的流数据。format.Load(memoryStream)将大家的影像设置为内部存款和储蓄器流值。图片数据流实行2个操作后,会调用Image.Copy(this.AnimationProcessMode)确认保证图像是最实用的格式。

四.总结

 
 说句实话,这位作者的编码风格是爱护的,代码简介明了,未有那么多装逼的写法,不会为了采用壹些写法,而去改变代码的可读性。对于这几个组件类别,笔者会近大概的写1些,我们能够借此打探部分组件,必要深切精晓和选取的,可以协考查看源码,举办相应的扩充。写完那篇,已经凌晨两点了,为温馨点个赞,无论写的什么,觉得温馨依旧尽量了。

 

http://www.bkjia.com/C\_jc/1200883.htmlwww.bkjia.comtruehttp://www.bkjia.com/C\_jc/1200883.htmlTechArticle开源免费的.NET图像即时处理的组件ImageProcessor,.netimageprocessor
承接在此以前的机件类别,这么些组件系列意在介绍.NET相关的零件,让我们能够在…

   2.ImageFactoryExtensions.AutoProcess() 

 internal static ImageFactory AutoProcess(this ImageFactory factory, IWebGraphicsProcessor[] graphicsProcessors)
        {
            if (factory.ShouldProcess)
            {
                foreach (IWebGraphicsProcessor graphicsProcessor in graphicsProcessors)
                {
                    factory.CurrentImageFormat.ApplyProcessor(graphicsProcessor.Processor.ProcessImage, factory);
                    IDisposable disposable = graphicsProcessor.Processor.DynamicParameter as IDisposable;
                    disposable?.Dispose();
                }
            }
            return factory;
        }

   
 ImageFactoryExtensions类是ImageFactory类的扩充类,首若是扩展Web项目。AutoProcess()方法基于添加到图像路径的此外查询字符串参数,自动处理图像文件。graphicsProcessors参数表示要使用的图片处理器阵列。graphicsProcessor.Processor.DynamicParameter
as IDisposable打开动态参数并处理任何索要它的品类。

   3.ImageProcessingModule.SetHeaders()

 public static void SetHeaders(HttpContext context, int maxDays)
        {
            object responseTypeObject = context.Items[CachedResponseTypeKey];
            object dependencyFileObject = context.Items[CachedResponseFileDependency];
            string responseType = responseTypeObject as string;
            string[] dependencyFiles = dependencyFileObject as string[];
            SetHeaders(context, responseType, dependencyFiles, maxDays);
        }

   
 在Web扩大中,ImageProcessingModule类比较关键,处理Web应用程序中的任何图像请求。SetHeaders()方法使浏览器和服务器将出口保存在其缓存中,从而增强品质。该措施接受七个参数,context表示请求的http音讯对象,HttpContext对象对内在服务器对象的引用。maxDays参数表示将图片存款和储蓄在浏览器缓存中的最长天数。

四.总结

 
 说句实话,那位小编的编码风格是喜欢的,代码简介明了,未有那么多装逼的写法,不会为了利用部分写法,而去改变代码的可读性。对于这些组件连串,作者会近或者的写一些,大家可以借此询问一些组件,需求深入摸底和动用的,能够本身查看源码,进行相应的壮大。写完那篇,已经凌晨两点了,为友好点个赞,无论写的如何,觉得自个儿大概尽量了。