Sinatra提交的直接表单图像使用RMagick

3
我正在尝试使用Sinatra和RMagick做一些非常简单的事情。
1. 通过一个简单的表单上传图片文件。 2. 使用RMagick调整大小。 3. 然后将其存储在数据库中以进行持久化(与本题无关)。
但是,在查看RDocs并进行了无数次测试之后,我似乎无法使表单图像成为一个干净的RMagick对象。
这是目前对我有用的可怕的东西:
def image_resize(img_data)
    filecount = rand
    writer = File.new("/tmp/#{filecount}.jpg", "w")
    writer.puts(img_data)
    writer.close

    resized_image = Magick::ImageList.new("/tmp/#{filecount}.jpg").first
    resized_image.crop_resized!(100,100, Magick::NorthGravity)
    resized.format = 'jpeg'
    resized_image.to_blob
end

#call the method with my form image data
image_resize(params[:image][:tempfile].read)

那么,我该如何做正确的明显之事,直接将我的表单图像数据插入到RMagick对象中,而不必写入和读取磁盘。

我尝试过各种读取Magick :: Image和ImageLists的方法,但只得到了大量错误信息。


感谢任何方向

-1.2.

2个回答

3
你需要从临时文件获取路径,并将其传递给Magick :: Image的read方法。
这是一个例子:
post "/upload-photo" do
  image = Magick::Image.read(params[:image][:tempfile].path)[0]
  image.crop_resized! 100, 100, Magick::CenterGravity
  store_image_data image.to_blob

  redirect "/done"
end

0

或者你可以直接从ActionDispatch::Http::UploadedFile中读取,像这样:

image = Magick::Image.from_blob(params[:image].read)

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