создание объекта ruby ​​File из Magick :: Image - PullRequest
5 голосов
/ 14 июня 2011

Я пытаюсь опубликовать изображения с водяными знаками на URL, используя rmagick и rest-client.Когда я генерирую составное изображение, я сохраняю его (.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)

1 Ответ

6 голосов
/ 05 сентября 2011

Я наконец-то понял это, используя StringIO и гем Koala (оболочка для ruby ​​для API Facebook).Код выглядит следующим образом:

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 :: Image и затем создать StringIO из этой строки.В текущей версии драгоценного камня Коала есть сбой со StringIO, но я исправил его в своем форке и отправил запрос на получение:

...