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参数表示将图片存储在浏览器缓存中的最长天数。
四.总结说句实话,这位作者的编码风格是喜欢的,代码简介明了,没有那么多装逼的写法,不会为了使用一些写法,而去改变代码的可读性。对于这个组件系列,我会近可能的写一些,大家可以借此了解一些组件,需要深入了解和使用的,可以自己查看源码,进行对应的扩展。写完这篇,已经凌晨两点了,为自己点个赞,无论写的怎样,觉得自己还是尽心了。