2010-11-01 24 views
1

我有一个问题,使用RMagick/ImageMagick打开通过Rails窗体上传的文件。我相信这是由于Rails Tempfile行为是为了消除文件扩展名。从我读过的内容来看,ImageMagick应该更喜欢使用幻数而不是文件扩展名来检测图像文件格式,但在我的安装中似乎不是这种情况。我这样做:RMagick/ImageMagick错误“无法解码此图像格式的代理”与Ruby Tempfile

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

其中full_size_image是将它视为对象从上传表单控制器,它创建了一个错误,如返回:

这种图像格式没有解码代表`在/ var /文件夹/ UI/uIsldaxoHkiXKWYFuTWs4 ++++ TI/-Tmp-/RackMultipart20101031-10144-1hiwlw-0' @错误/ constitute.c/ReadImage/532

这是在Mac OS X 10.6发生使用Rails 2.3。 8,RMagick 2.13.1和ImageMagick 6.6.5-5。我已确认ImageMagick可以将我用来通过上传表单成功测试的文件进行转换,并且tempfile文件路径/文件实际存在/可读。

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

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

感谢您的帮助。

回答

4

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

+0

和DYLD_LIBRARY_PATH应该设置为...? – umassthrower 2012-10-30 19:56:41

+1

它会根据您安装ImageMagick的方式而有所不同,但一般来说DYLD_LIBRARY_PATH需要包含来自编译ImageMagick安装的lib /目录。如果你安装了自制软件(比自己从源代码构建起来容易得多),它们可能位于/ usr/local/Cellar/imagemagick//lib – 2012-11-12 05:14:25