RMagick - ImageMagick给出错误"此图像格式无解码委托"

gka*_*kck 9 ruby rmagick imagemagick

当我试图操纵从sinatra上传的图像时,会出现问题.

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

上传的文件是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"}
Run Code Online (Sandbox Code Playgroud)

ImageMagick还有必要的代表

convert -list configure
Run Code Online (Sandbox Code Playgroud)

回报

DELEGATES     bzlib freetype jpeg jng jp2 lcms png tiff x11 xml zlib
Run Code Online (Sandbox Code Playgroud)

所以,我应该能够上传和转换一个jpeg,但它会对代表抱怨.我也在Mac OSX 10.7上工作,也许是mac的另一个奇怪的问题

Iva*_*der 9

我找到了解决方案:

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

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