我在使用 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 副本,但这似乎不合时宜。解决这个问题的正确方法是什么?
谢谢你的帮助。