2011-06-14 35 views
5

我想用rmagick和其他客戶端發佈帶水印的圖像到一個URL。當我生成複合圖像時,我將其保存(.write),用File.new重新讀入,然後發佈該File對象。理想情況下,我想繞過寫操作,因爲我再也不需要這張照片了。有沒有辦法將Magick :: Image對象轉換爲File對象,以便我可以將其與rest-client一起發佈?從Magick創建一個紅寶石文件對象:: Image

require 'rmagick' 
require 'rest-client' 

photo = Magick::Image.read('myphoto.jpg').first 
water_mark = Magick::Image.read('watermark.png').first 

result = photo.composite(water_mark, 0, 0, Magick::OverCompositeOp) 
result.write('result.jpg') 

file = File.new('result.jpg', 'rb') 
RestClient.post("http://example.com", :source => file) 
+0

你看着StringIO的? – coreyward 2011-06-14 05:43:22

回答

5

我終於想出了使用StringIO和考拉寶石(Facebook API的ruby包裝)。代碼如下所示:

access_token = "asdfasdfasdfasdf" 
graph = Koala::Facebook::API.new(access_token) 
photo = Magick::Image.read("my_photo.jpg").first 
watermark = Magick::Image.read("watermark.png").first 
watermarked = photo.composite(watermark, 5, 5, Magick::OverCompositeOp) 
photo_graph_id = StringIO.open(watermarked.to_blob) do |strio| 
    response = graph.put_picture(strio, "image/jpeg", { "message" => "hi" }) 
    response['id'] 
end 

的關鍵是調用to_blob對Magick ::圖像,然後從這個字符串創建一個StringIO的。考拉寶石的當前版本有StringIO的一個小故障,但我已經在我的叉子固定,並已提交pull請求:

https://github.com/arsduo/koala/pull/122

+0

偉大的工作修復! – 2012-09-22 16:56:55

+0

它幫了我很多!謝謝。 – 2013-04-18 23:26:55