Ruby RMagick与Sinatra提交的直接表单图像

Ruby RMagick与Sinatra提交的直接表单图像,ruby,sinatra,rmagick,Ruby,Sinatra,Rmagick,我正在尝试使用Sinatra和RMagick做一些非常简单的事情 通过一个简单的形式拍摄一张照片 文件上传 使用RMagick调整其大小 然后将其存储在数据库中,以便 持久性(无关) 但是在经历了RDocs和无休止的头部撞击测试之后 我似乎无法将表单图像清晰地传送到RMagick对象 这是目前对我来说最可怕的事情: def image_resize(img_data) filecount = rand writer = File.new("/tmp/#{filecount}.jp

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

  • 通过一个简单的形式拍摄一张照片 文件上传
  • 使用RMagick调整其大小
  • 然后将其存储在数据库中,以便 持久性(无关)
  • 但是在经历了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和ImageList的方法,但只收到了大量的错误


    谢谢你的指导


    -1.2.

    您需要从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
    

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

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

    谢谢你善良的先生。路径正是我所需要的。