HTML5技术

开源免费的.NET图像即时处理的组件ImageProcessor - 彭泽0902(2)

字号+ 作者:H5之家 来源:H5之家 2017-03-18 11:01 我要评论( )

public ImageFactory Load( string imagePath){FileInfo fileInfo = new FileInfo(imagePath); if (fileInfo.Exists){ this .ImagePath = imagePath; using (FileStream fileStream = new FileStream(imagePath, Fi

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) { ); } MemoryStream memoryStream = memoryStream.Position = .Image =.InputStream = memoryStream; format.Quality = DefaultQuality; format.IsIndexed = FormatUtilities.IsIndexed(this.Image); this.backupFormat = format; .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; }

   该方法用来加载要处理的图像的方法, 始终首先调用此方法。该方法具有4个重载版本,分别接收的参数为string,byte[],Image,Stream。FormatUtilities.GetFormat(fileStream)方法从给定流获取正确的ISupportedImageFormat。在对图片的数据流进行操作时,首先会复制图片的流数据。format.Load(memoryStream)将我们的映像设置为内存流值。图片数据流进行一个操作后,会调用Image.Copy(this.AnimationProcessMode)确保图像是最有效的格式。

   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()

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.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 跨平台的.NET邮件协议MailKit组件解析 - 彭泽0902

    跨平台的.NET邮件协议MailKit组件解析 - 彭泽0902

    2017-03-17 13:01

  • 一份关于组建.NET Core开源团队的倡议书 - 彭泽0902

    一份关于组建.NET Core开源团队的倡议书 - 彭泽0902

    2017-03-13 17:02

  • 南京.NET技术行业落地分享交流会圆满成功 - 徐龙的博客

    南京.NET技术行业落地分享交流会圆满成功 - 徐龙的博客

    2017-03-13 09:00

  • JavaWeb与Asp.net工作原理比较分析 - 社会主义接班人

    JavaWeb与Asp.net工作原理比较分析 - 社会主义接班人

    2017-03-12 14:00

网友点评
0