从Magick::Image创建ruby文件对象

从Magick::Image创建ruby文件对象,ruby,rmagick,rest-client,Ruby,Rmagick,Rest Client,我正在尝试使用rmagick和rest客户端将带水印的图像发布到url。生成合成图像时,我保存它(.write),用File.new将其读回,然后发布该文件对象。理想情况下,我想绕过写操作,因为我再也不需要这张照片了。有没有办法将Magick::Image对象转换为File对象,这样我就可以用rest客户端发布它 require 'rmagick' require 'rest-client' photo = Magick::Image.read('myphoto.jpg').first wat

我正在尝试使用rmagick和rest客户端将带水印的图像发布到url。生成合成图像时,我保存它(.write),用File.new将其读回,然后发布该文件对象。理想情况下,我想绕过写操作,因为我再也不需要这张照片了。有没有办法将Magick::Image对象转换为File对象,这样我就可以用rest客户端发布它

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)

我最终用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
关键是调用Magick::Image上的_blob,然后从该字符串创建StringIO。考拉宝石的当前版本有一个StringIO的小故障,但我已经在我的fork中修复了它,并提交了一个pull请求:


这对我帮助很大!谢谢