2010-08-27 25 views
3

我想做一些很簡單的事情,使用SinatraRMagickRMagick用直接表格提交從Sinatra圖片

  1. 拍攝影像,通過一個簡單的形式 文件上傳
  2. 使用RMagick調整其大小
  3. 然後將其存儲在數據庫中 持久(無關)

但經過通過RDocs和無休止的頭撞測試 我似乎無法將表單圖像轉換爲RMagick對象clea nly

這是當前的工作對我來說是可怕的事情:

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中閱讀的各種閱讀方式,但只有大量的錯誤barfed在我身上。


感謝任何方向

-1.2的。

回答

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

謝謝指點先生。路徑是正是我需要的。 – ConfusedPlusPlus 2010-08-27 02:30:43

0

或者你可以從ActionDispatch :: HTTP :: UploadedFile的直讀,像這樣:

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