INN*_*VTV 0 c# asp.net wcf image-resizing imageresizer
我一直在评估Nathanael Jones 令人惊叹的成像库和插件,用于我公司在Azure上构建的一些图像处理服务.在获得许可证之前,我们会对它们进行全面测试,以确保它们符合我们的方案.帮自己一个忙,在这里检查一下.
在ASP.NET MVC Web应用程序中使用插件时,我在插件方面取得了巨大成功.我正在使用我在UI中发布的Controller中的图像服务器功能.裁剪,调整大小和简单/高级过滤器正在按预期工作.
我遇到的问题是当我将此功能作为该应用程序中的类库移动到WCF服务时.裁剪和调整大小的工作完全符合预期,但所有过滤指令(亮度,对比度,棕褐色等)都被忽略或无声地失败.这是图像处理代码:
var instructions = new ImageResizer.Instructions();
//All of these instructions work
instructions.Width = 300;
instructions.Height = 300;
instructions.Mode = ImageResizer.FitMode.Crop;
instructions.OutputFormat = ImageResizer.OutputFormat.Jpeg;
instructions.JpegQuality = 90;
double[] cropCoordinates = {0,100,0,100};
instructions.CropRectangle = cropCoordinates;
instructions.Mode = ImageResizer.FitMode.Crop;
//These instructions are ignored, or fail silently
instructions.Invert = true;
instructions.Saturation = -1;
instructions.Sepia = true;
var imageJob = new ImageResizer.ImageJob();
imageJob.Instructions = instructions;
imageJob.Source = bmpSource;
imageJob.Dest = typeof(Bitmap);
imageJob.Build();
Run Code Online (Sandbox Code Playgroud)
我已经将我的MVC应用程序使用的Web.Config设置复制到使用ImageResizing包(来自Nuget)的类库的App.Config.
<configuration>
<configSections>
<section name="resizer" type="ImageResizer.ResizerSection" requirePermission="false" />
</configSections>
<resizer>
<plugins>
<add name="SimpleFilters" />
<add name="AdvancedFilters" />
</plugins>
</resizer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
而且,为了确保,我还包括使用主库和插件的语句:
using ImageResizer;
using ImageResizer.Plugins.AdvancedFilters;
using ImageResizer.Plugins.SimpleFilters;
Run Code Online (Sandbox Code Playgroud)
正如我所提到的,当移动到具有WCF服务的类库时,裁剪和调整大小工作完美,但过滤器无声地失败.图像按照指示进行裁剪和调整,但滤镜不会应用于图像.我已经尝试了几种安装库的变体(甚至包括我的解决方案中的每个项目的包).
事实上我的WCF服务是作为NET.TCP端点托管的吗?我是否应该考虑更新我的架构,以便通过WCF服务发布到的Web API提供映像服务?
更新
我通过在代码中安装插件来绕过Web.Config/App.Config:
ImageResizer.Configuration.Config.Current.Plugins.Install(new ImageResizer.Plugins.SimpleFilters.SimpleFilters());
ImageResizer.Configuration.Config.Current.Plugins.Install(new ImageResizer.Plugins.AdvancedFilters.AdvancedFilters());
Run Code Online (Sandbox Code Playgroud)
我已经验证插件现在已加载到:
ImageResizer.Configuration.Config.Current.Plugins
Run Code Online (Sandbox Code Playgroud)
我在imageJob.Build()时遇到以下错误 叫做:
无法加载文件或程序集'AForge.Imaging,Version = 2.2.5.0,Culture = neutral,PublicKeyToken = ba8ddea9676ca48b'或其依赖项之一.该系统找不到指定的文件.
希望这是配置的另一个问题我已经在使用ImageResizer的类的顶部添加了以下using语句:
using AForge;
using AForge.Imaging;
using AForge.Imaging.Filters;
using AForge.Imaging.ColorReduction;
using AForge.Imaging.ComplexFilters;
using AForge.Imaging.Textures;
Run Code Online (Sandbox Code Playgroud)
配置问题已解决,但我仍然得到AForge库的相同错误.在这里为这个具体问题开了一个新问题
我怀疑配置没有被加载.您可以通过调试和检查ImageResizer.Configuration.Config.Current实例来访问诊断页吗?
您可以考虑通过代码配置软件 - 创建新的Config实例并在其上安装插件,然后将其用于每个图像作业.
总的来说,我肯定建议将它用作HttpModule,就像预期的那样 - 特别是如果你想要杠杆磁盘缓存.