【问题标题】:ImageProcessor with EPiServer not working带有 EPiServer 的 ImageProcessor 无法正常工作
【发布时间】:2017-08-11 10:00:40
【问题描述】:

我正在尝试使用 ImageProcessor 配置 EPiServer 9 站点,但无法正常工作。

我已经安装了以下 nuget 包:

ImageProcessor
ImageProcessor.Web
ImageProcessor.Web.Config

使用默认配置不会发生任何事情。在 config/imageprocessor/security.config 中使用以下自定义配置 ...

<security>
  <services>
    <service name="CloudImageService" type="ImageProcessor.Web.Services.CloudImageService, ImageProcessor.Web">
      <settings>
        <setting key="MaxBytes" value="8194304" />
        <setting key="Timeout" value="30000" />
        <setting key="Host" value="http://site.local/globalassets/"/>
      </settings>
    </service>
    <service prefix="remote.axd" name="RemoteImageService" type="ImageProcessor.Web.Services.RemoteImageService, ImageProcessor.Web">
      <settings>
        <setting key="MaxBytes" value="4194304" />
        <setting key="Timeout" value="3000" />
        <setting key="Protocol" value="http" />
      </settings>
      <whitelist>
      </whitelist>
    </service>
  </services>
</security>

... ImageProcessor 似乎正在尝试调整我的图像大小,但出现以下错误...

[ImageFormatException: Input stream is not a supported format.]
   ImageProcessor.ImageFactory.Load(Stream stream) +523
   ImageProcessor.Web.HttpModules.<ProcessImageAsync>d__34.MoveNext() +3308
   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +62
   System.Web.TaskAsyncHelper.EndTask(IAsyncResult ar) +64
   System.Web.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar) +162

...当尝试像这样将图像调整为 200px 宽度时:

http://site.local/globalassets/sample_image.jpg?width=200

有人对我如何让它工作有任何建议吗?没有宽度参数,图像显示正常:

http://site.local/globalassets/sample_image.jpg

【问题讨论】:

标签: episerver imageprocessor episerver-9


【解决方案1】:

在我使用 EPiServer 和 ImageProcessor 的项目中,我总是必须创建自己的 IImageService。

类似这样的:

https://gist.github.com/andreas-cloudnine/34dc468205a230f0579585db17aa1593

使用的 ImageFile 是项目中继承自 EPiServer.Core.ImageData 的媒体类型。

那么你也得在 web.config 中使用它,只需用这个配置替换整个部分:

<security>
  <services>
    <service name="EPiServerImageService" type="YourSite.EPiServerImageService, YourSite" />
</services>
</security>

【讨论】:

  • 不错!以前从未见过有人将 ImageProcessor 与 EPiServer 一起使用。
  • 我尝试像您的示例一样添加我自己的 IImageService。我应该在哪里以及如何将它添加到我的 web.config 中?您能否在 web.config 中添加您添加的行的示例?感谢您的帮助!
  • 我已经用配置更新了我的答案。请接受。 :)
  • 谢谢,但我仍然无法正常工作。我现在在ImageProcessor.Web.HttpModules.ImageProcessingModule.GetImageServiceForRequest(String url, String applicationPath) 中得到一个 NullReferenceException
  • 对不起,我是个白痴...我实现了 EPiServer.ImageLibrary.IImageService 而不是 ImageProcessor 版本。非常感谢您的帮助!