ruby-on-rails - RMagick/ImageMagick 错误 "no decode delegate for this image format"与 Ruby Tempfile

标签 ruby-on-rails ruby imagemagick rmagick

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

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

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

no decode delegate for this image format `/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 安装中的某些东西以某种方式阻止它使用魔数(Magic Number)来检测文件类型(?? - 让 ImageMagick 从源代码处理 Snow Leopard 本身就是一次冒险)或者 b)只有在这不起作用的情况下,我需要以某种方式使 Tempfile 保留原始文件扩展名。

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

感谢您的帮助。

最佳答案

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

关于ruby-on-rails - RMagick/ImageMagick 错误 "no decode delegate for this image format"与 Ruby Tempfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4065944/

相关文章:

javascript - jquery_ujs和rails-ujs问题ajax页面的问题

ruby-on-rails - Rails 模型中的条件回调?

ruby-on-rails - 无法访问 Rails 中的 ENV 变量

mysql - Rails Mysql::错误:查询:未连接 Windows 7

ruby-on-rails - Rails 3.1 错误捕获

mysql - Rails/Snow Leopard Mysql 64位问题

ruby-on-rails - Ruby on Rails : models, 迁移和概览

ruby-on-rails - 回形针错误 - NotIdentifiedByImageMagickError

shell - 在 shell 脚本中合成两个图像

php - 在从数据库中获取图像时,使用带有 php 的图像 magick 来调整图像大小