RMagick - ImageMagick出现错误“no decode delegate for this image format”

10

当我尝试从Sinatra上传图片并进行操作时,出现了问题。

File.open(params[:file][:tempfile]) do |p|
   thumb = Magick::Image.read(p)
   thumb.crop_resized!(75, 75, Magick::NorthGravity)
end

上传的文件是jpeg格式,上传图像时的表单数据包括:
{:filename=>"299732_176749115737355_100002068035867_380115_618512842_n.jpg",    :type=>"image/jpeg", :name=>"file", :tempfile=>#<File:/var/folders/hf/d6vx6vg56nbd5n44jjrp84k80000gn/T/RackMultipart20120228-55947-1fd2l6c>, :head=>"Content-Disposition: form-data; name=\"file\"; filename=\"299732_176749115737355_100002068035867_380115_618512842_n.jpg\"\r\nContent-Type: image/jpeg\r\n"}

而且ImageMagick有必要的代理。
convert -list configure

返回值

DELEGATES     bzlib freetype jpeg jng jp2 lcms png tiff x11 xml zlib

所以,我应该能够上传和转换JPEG文件,但它反复抱怨关于委托的问题。 另外,我正在使用Mac OSX 10.7版本,可能还有其他与Mac相关的奇怪问题。


我也使用brew安装了ImageMagick。 - gkaykck
1个回答

10

我找到了适合我的解决方案:

tmpfile = params[:file][:tempfile]
image = Magick::ImageList.new
bin = File.open(tmpfile, 'r'){ |file| file.read }
img = image.from_blob(bin)

我想问题出现的原因是rmagick尝试通过文件扩展名来定义图像类型,但上传的文件没有扩展名。祝好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接