5

rmagick と rest-client を使用して、透かし入りの画像を URL に投稿しようとしています。合成画像を生成したら、それを保存 (.write) し、File.new で読み込んでから、その File オブジェクトをポストします。ただし、理想的には、この写真は二度と必要ないため、書き込み操作をバイパスしたいと考えています。Magick::Image オブジェクトを File オブジェクトに変換して、rest-client で投稿できるようにする方法はありますか?

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)
4

1 に答える 1

6

StringIO と Koala gem (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

重要なのは、Magick::Image で to_blob を呼び出し、その文字列から StringIO を作成することでした。Koala gem の現在のバージョンには StringIO の不具合がありますが、フォークで修正し、プル リクエストを送信しました。

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

于 2011-09-05T19:35:01.437 に答える