来自Sinatra的直接表格提交的RMagick

时间:2010-08-27 00:53:19

标签: ruby sinatra rmagick

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

  1. 通过简单的表格拍摄图像 文件上传
  2. 使用RMagick调整大小
  3. 然后将其存储在数据库中 持久性(不相关)
  4. 但经过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 个答案:

答案 0 :(得分:3)

你需要从tempfile获取路径并将其传递给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

答案 1 :(得分:0)

或者您可以直接从ActionDispatch :: Http :: UploadedFile阅读:

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