3

我正在尝试使用SinatraRMagick做一些非常简单的事情。

  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。

4

2 回答 2

3

您需要从临时文件中获取路径并将其传递给 Magick::Image's 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
于 2010-08-27T02:18:01.843 回答
0

或者您可以直接从 ActionDispatch::Http::UploadedFile 中读取,如下所示:

image = Magick::Image.from_blob(params[:image].read)
于 2015-07-14T23:50:22.903 回答