ImageResizing.Net 落后于 WCF

ImageResizing.Net behind WCF

我一直在评估 Nathanael Jones amazing imaging library and plugins for some image processing services my company is building on Azure. Before acquiring a license we are testing them fully to ensure they fit in within our scenario. Do yourself a favor and check them out Here

我在 ASP.NET MVC 网络应用程序中使用插件时取得了巨大的成功。我在 post 到 UI 的控制器中使用图像服务器功能。裁剪、调整大小和 Simple/Advanced 过滤器按预期工作。

我遇到的问题是当我将此功能作为该应用程序中的 class 库移动到 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)的 class 库的 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 语句:

using ImageResizer;
using ImageResizer.Plugins.AdvancedFilters;
using ImageResizer.Plugins.SimpleFilters;

正如我所提到的,当移动到具有 WCF 服务的 class 库时,裁剪和调整大小工作完美,但过滤器会无提示地失败。图像已按照说明进行裁剪和调整大小,但滤镜未应用于图像。我已经尝试了几种安装库的变体(甚至包括我解决方案中每个项目的包)。

我的 WCF 服务可以作为 NET.TCP 端点托管吗?我是否应该考虑更新我的体系结构以通过 Web API 为 WCF 服务 post 提供支持的成像服务?

已更新

我正在绕过 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(); 时收到以下错误:

Could not load file or assembly 'AForge.Imaging, Version=2.2.5.0, Culture=neutral, PublicKeyToken=ba8ddea9676ca48b' or one of its dependencies. The system cannot find the file specified.

希望这是另一个配置问题,我在使用 ImageResizer 的 class 顶部添加了以下 using 语句:

using AForge;
using AForge.Imaging;
using AForge.Imaging.Filters;
using AForge.Imaging.ColorReduction;
using AForge.Imaging.ComplexFilters;
using AForge.Imaging.Textures;

配置问题已解决,但 AForge 库仍然出现相同的错误。已针对此特定问题打开一个新问题

我怀疑没有加载配置。您可以通过调试和检查 ImageResizer.Configuration.Config.Current 实例来访问诊断页面吗?

您可以考虑通过代码配置软件 - 创建一个新的 Config 实例并在其上安装插件,然后将其用于每个图像作业。

总的来说,我肯定会建议按照预期的方式将它用作 HttpModule - 特别是如果您想利用磁盘缓存。