2011-06-14 5 views
5

rmagick 및 rest-client를 사용하여 워터 마크 이미지를 URL에 게시하려고합니다. 합성 이미지를 생성 할 때 File.new로 다시 읽은 다음 File 객체를 게시합니다. 이상적으로는이 사진이 다시 필요하지 않기 때문에 쓰기 작업을 건너 뛰고 싶습니다. Magick :: Image 객체를 File 객체로 변환하여 나머지 클라이언트와 함께 게시 할 수있는 방법이 있습니까?Magick :: Image에서 ruby ​​File 객체 만들기

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

답변

5

마침내 StringIO와 Koala gem (Facebook API의 경우 루비 래퍼)을 사용하여 알아 냈습니다. 코드는 다음과 같습니다

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 

의 핵심은 해당 문자열에서 StringIO를 생성 한 후 :: 마법 (magick)에 이미지를 to_blob 전화를했다. 코알라 보석의 현재 버전은 StringIO있는 결함을 가지고 있지만 나는 포크에 고정했고 끌어 오기 요청 제출 :

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

+0

위대한 일이 바로 그것! –

+0

그것은 나를 많이 도왔습니다! 감사. –