【问题标题】:RMagick/ImageMagick error "no decode delegate for this image format" with Ruby TempfileRuby Tempfile 的 RMagick/ImageMagick 错误“没有此图像格式的解码委托”
【发布时间】:2010-11-01 00:36:15
【问题描述】:

我在使用 RMagick/ImageMagick 打开通过 Rails 表单上传的文件时遇到问题。我相信这是因为 Rails Tempfile 行为是为了消除文件扩展名。根据我的阅读,ImageMagick 应该更喜欢使用幻数而不是文件扩展名来检测图像文件格式,但在我的安装中似乎并非如此。我正在这样做:

img = Magick::Image.read(full_size_image.path)

其中 full_size_image 是从上传表单控制器返回的 Tempfile 对象,这会产生如下错误:

没有此图像格式的解码委托 `/var/folders/uI/uIsldaxoHkiXKWYFuTWs4++++TI/-Tmp-/RackMultipart20101031-10144-1hiwlw-0' @error/constitute.c/ReadImage/532

这发生在带有 Rails 2.3.8、RMagick 2.13.1 和 ImageMagick 6.6.5-5 的 Mac OS X 10.6 上。我已经确认ImageMagick可以通过上传表单成功转换我用来测试的文件,并且临时文件路径/文件确实存在/可读。

我怀疑要么a)我的 ImageMagick 安装中的某些东西以某种方式阻止它使用幻数来检测文件类型(?? - 从源代码让 ImageMagick 在 Snow Leopard 上工作本身就是一种冒险)或 b)只有在这不起作用的情况下,我需要以某种方式使 Tempfile 保留原始文件扩展名。

我知道我可以从 Tempfile 对象中获取原始文件名,但我还没有找到重命名文件的方法。我想我可以在使用 File 对象的地方做一些杂乱无章的事情,并以某种方式创建一个带有原始扩展名的 Tempfile 副本,但这似乎不太合适。解决这个问题的正确方法是什么?

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby imagemagick rmagick


    【解决方案1】:

    我发现了问题 - DYLD_LIBRARY_PATH 环境变量在我的 shell 中设置正确,我在其中测试 convert 的命令行版本,但在我的 Mongrel 服务器运行的地方设置不正确。在我解决这个问题后,它开始工作了。

    【讨论】:

    • 和 DYLD_LIBRARY_PATH 应该设置为...?
    • 它会根据您安装 ImageMagick 的方式而有所不同,但一般来说 DYLD_LIBRARY_PATH 需要包含已编译的 ImageMagick 安装中的 lib/ 目录。如果您使用自制软件安装(比尝试自己从源代码构建要容易得多),它们可能位于 /usr/local/Cellar/imagemagick//lib
    猜你喜欢
    • 2012-03-17
    • 2015-07-12
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多