WCF背后的ImageResizing.Net

时间:2015-04-10 01:37:55

标签: c# asp.net wcf image-resizing imageresizer

我一直在为我公司在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

开了一个新问题

1 个答案:

答案 0 :(得分:5)

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

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

总的来说,我肯定建议将它用作HttpModule,就像预期的那样 - 特别是如果你想要杠杆磁盘缓存。