当我试图操作从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"rnContent-Type: image/jpegrn"}
而且ImageMagick有必要的代表
convert -list configure
返回
DELEGATES bzlib freetype jpeg jng jp2 lcms png tiff x11 xml zlib
所以,我应该能够上传和转换jpeg,但它抱怨代理。此外,我正在使用Mac OSX 10.7,可能是Mac 的另一个奇怪问题
我为自己找到了解决方案:
tmpfile = params[:file][:tempfile]
image = Magick::ImageList.new
bin = File.open(tmpfile, 'r'){ |file| file.read }
img = image.from_blob(bin)
我想问题的出现是因为rmagick试图通过文件扩展名来定义图像类型。但上传的文件没有扩展名。祝你好运