RailsアプリでSVGからPNGへの画像変換を試みています。Heroku が現時点で IM をアップグレードできない/アップグレードしたくないため、ImageMagick はうまくいきませんでした。開発で RSVG2 / Cairo を使用するいくつかのアイデアをテストしていますが、障害が発生しています。
次のように、SVG を PNG に簡単に変換して保存できます。
#svg_test.rb
require 'debugger'
require 'rubygems'
require 'rsvg2'
SRC = 'test.svg'
DST = 'test.png'
svg = RSVG::Handle.new_from_file(SRC)
surface = Cairo::ImageSurface.new(Cairo::FORMAT_ARGB32, 800, 800)
context = Cairo::Context.new(surface)
context.render_rsvg_handle(svg)
surface.write_to_png(DST)
しかし、これではPNGファイルしか書き出せません。アプリでは、これらをオンザフライで生成し、データとしてクライアント ブラウザーに送信できる必要があります。そして、これを行う方法、またはサポートされているかどうかさえわかりません。少なくとも生データを取得するために surface.data を呼び出すことができることは知っていますが、これを PNG として取得する方法を知るには、画像形式について十分に知りません。
ありがとう