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 - 特别是如果您想利用磁盘缓存。
我一直在评估 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 - 特别是如果您想利用磁盘缓存。