【问题标题】:ImageResizer simply not resizing imagesImageResizer 根本不调整图像大小
【发布时间】:2014-06-07 13:15:50
【问题描述】:

我有一个 ASP.NET MVC 3 项目,我安装了 ImageResizer Mvc Web.Config 包,它添加了所有必要的组件,并为我修改了我的 Web.Config 文件。

我的 MVC 视图中有以下代码:

<div id="heroimage" class="slideshow">
    <div>[LEFT]</div
    <div>[RIGHT]</div>
    <div>[INDICATOR]</div>
    @foreach (ICMSElement oHeroImage in Model.Elements("HeroImage")){
        <img src="images/@oHeroImage.Value" />       
    }
</div>

<div id="image-strip" class="viewer">
    <div class="slider">
        <ul>
            @foreach (ICMSElement oHeroImage in Model.Elements("HeroImage")){
                <li><img src="images/@oHeroImage.Value?width=100&height=100"></li>
            }
        </ul>
    </div>
</div>

第二个 div 中包含的图像未调整大小。没有用于覆盖调整大小的宽度和高度的 css。

在 ImageResizer 的故障排除页面中,指出如果无法调整图像大小,可能是以下原因之一:

您没有在 Web.config 文件的两个位置正确注册 HttpModule。

(我使用了为我修改 Web.Config 的 NuGet 包)

您正在使用 IIS 6(或更早版本)或 IIS7 Classic Pipeline,并且未使用 .jpg.ashx 语法,并且您尚未将所有请求都映射到 ASP.NET 运行时。

(我的 IIS 服务器在集成模式下运行 IIS 7)

您正在使用 ASP.NET MVC(并且有冲突的路由),但没有安装 MvcRoutingShim 插件。

(MvcRoutingShim插件根据调试页面安装)

您输入错误的查询字符串命令。

(我在上面的代码sn-p中没有这样做)

原始图像小于您请求的尺寸,并且您没有使用 &scale=both(默认行为是从不放大图像,但这可以更改)

(本例中默认图片尺寸为1280x800)

我的 Resizer.Debug 输出在这里:https://gist.github.com/Thoth2020/11197160

我的网站在布局页面中使用了基本标签,但是它没有调整 img 的 src 属性。例如,我正在查看的页面呈现了这个 img 标签:

<img src="images/00100010_1200_800_slideshow_03.jpg?width=100&height=100">

这与上面解释 Razor 语法的 sn-p 相同。

所以,我想我不知道为什么它不能正常工作。

【问题讨论】:

  • 听起来像其他模块或处理程序在 ImageResizer 可以处理它们之前拦截请求。您是否尝试过 .ashx 语法以查看是否失败?即“images/00100010_1200_800_slideshow_03.jpg.ashx?width=100&height=100”
  • 如果我所做的只是在查询字符串之前将 .ashx 添加到图像中,我确实会看到损坏的图像,当我转到“在新选项卡中打开图像”时,我会看到 IIS 异常。现在,除了将 .ashx 后缀添加到 img src 标签之外,我应该做些什么吗?我正在查看 ImageResizer 支持部分。无论如何,我得到的异常看起来像是该站点的现有控制器之一正试图抓住这一点,然后异常退出。
  • 我将标签 添加到 Web.Config 的调整大小部分,但我仍然收到错误,所以我不知道这是否会有所帮助我。无论如何,我在这里将 IIS 错误消息放在一个要点中:gist.github.com/Thoth2020/11223241 我想弄清楚是现有代码抓住了它(那个 AssetController)还是那个 MvcHandler。我想问题是,有没有办法让 ImageResizer 先获取这个请求?
  • 只是一个更新,我发现了 MVC 应用程序中试图抓取图像的部分。它所做的(或尝试做的,它例外,因为它在磁盘上找不到以 .ashx 结尾的文件)是在看到图像时返回 FilePathResult。我猜当它得到它的那一刻,ImageResizer 永远没有机会看到它。你知道我有什么方法可以强制 ImageResizer 处理请求吗?
  • 或者,是否可以将代码放入正在抓取请求的控制器中,以便将其路由到 ImageResizer?

标签: imageresizer


【解决方案1】:

您有一个现有的控制器或另一个干扰 ImageResizer 的 HttpModule。一种解决方法是使用 fakeExtensions 功能来避免匹配这些路由。这使您的 URL 看起来像 image.jpg.ashx?width=400 而不是 image.jpg?width=400

如果您的 CMS 抽象出图像存储,并且未实现 VirtualPathProvider,您可能需要实现 IVirtualImageProvider 以弥合 CMS 数据层和 ImageResizer 之间的差距。

不过,通常情况下,您可以使用我们现有的存储插件之一(SqlReader、S3Reader、VirtualFolder、RemoteReader)直接访问数据存储。

【讨论】:

    【解决方案2】:

    我有同样的问题。 imageResizer 可以很好地保存和显示图像,但是调整大小和裁剪或旋转功能都不起作用。

    我的问题解决了,只需将两个带有Install-Package ImageResizer.WebConfigInstall-Package ImageResizer 的nuget 包添加到我的web 项目中。我在我的 类库 项目中使用了它们,该项目正在执行所有逻辑工作,但似乎在运行的程序集(无论是 Web 应用程序还是桌面)上也需要它们。

    【讨论】:

    • 我正在使用 Angular 项目。但我只托管在实时 Windows 服务器中。我为此安装搜索了 nuget 包。无法获取 imageresize.dll 和 imageresize.pdb 的包。你能把文件分享给我吗?
    • 很抱歉,共享单个文件并不安全,但您应该可以从官方网站获取它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 2018-01-25
    • 2012-08-07
    相关资源
    最近更新 更多