2011-06-14 9 views
5

Bir URL'ye rmagick ve rest-client kullanarak filigranlı görüntüler göndermeye çalışıyorum. Kompozit görüntüyü oluşturduğumda, (.write) 'i kaydederim, File.new ile tekrar okuyun ve o File nesnesini yayınlarım. İdeal olarak, yazma işlemini baypas etmek isterim çünkü bu fotoğrafa bir daha asla ihtiyacım olmaz. Bir Magick :: Image nesnesini bir File nesnesine dönüştürmenin herhangi bir yolu var mı?Bir ruby ​​dosya nesnesi oluşturma 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

Eğer StringIO baktınız mı? – coreyward

cevap

5

Sonunda StringIO ve Koala gem (Facebook API'si için ruby ​​sarıcı) kullanarak bunu çözdüm. Kod şöyle görünür:

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 

anahtar o dizesinden bir StringIO oluşturmak sonra :: Magick üzerinde Image to_blob arayıp etmekti. Koala mücevher mevcut sürümü StringIO ile aksaklık var ama benim çatal bunu giderdik ve bir çekme isteği gönderdiniz:

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

+0

Bunu düzeltmek için harika bir iş! –

+0

Bu bana çok yardımcı oldu! Teşekkürler. –