我一直在为我公司在Azure上构建的一些图像处理服务评估Nathanael Jones惊人的成像库和插件。在获得许可证之前,我们会对它们进行全面测试,以确保它们符合我们的方案。帮自己一个忙,然后查看Here。
在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();
我将我的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>
为了确保,我还包括使用主库和插件的语句:
using ImageResizer;
using ImageResizer.Plugins.AdvancedFilters;
using ImageResizer.Plugins.SimpleFilters;
正如我所提到的,当使用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());
我已经确认插件现已加载到:
ImageResizer.Configuration.Config.Current.Plugins
当调用 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;
配置问题已解决,但我仍然得到AForge库的相同错误。为此特定问题Here
开了一个新问题答案 0 :(得分:5)
我怀疑配置没有加载。您是否可以通过调试和检查ImageResizer.Configuration.Config.Current
实例来访问诊断页面?
您可以考虑按代码配置软件 - 创建新的Config实例并在其上安装插件,然后将其用于每个图像作业。
总的来说,我肯定建议将它用作HttpModule,就像预期的那样 - 特别是如果你想要杠杆磁盘缓存。