gpt4 book ai didi

ruby-on-rails - Ruby,RSVG和PNG流

转载 作者:行者123 更新时间:2023-12-03 18:34:12 24 4
gpt4 key购买 nike

我正在尝试在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来获取。

谢谢

最佳答案

啊哈!我是如此亲密,事后看来很明显。只需使用StringIO对象调用surface.write_to_png函数。这将填充字符串对象,然后您可以获取其字节。这是我编写的完成的svg_to_png函数,以及调用它的示例 Controller 。希望这可以帮助其他人。

ImageConvert函数:

  def self.svg_to_png(svg)
svg = RSVG::Handle.new_from_data(svg)
surface = Cairo::ImageSurface.new(Cairo::FORMAT_ARGB32, 800, 800)
context = Cairo::Context.new(surface)
context.render_rsvg_handle(svg)
b = StringIO.new
surface.write_to_png(b)
return b.string
end

测试 Controller :
  def svg_img
path = File.expand_path('../../../public/images/test.svg', __FILE__)
f = File.open(path, 'r')
t = ImageConvert.svg_to_png(f.read)
send_data(t , :filename => 'test.png', :type=>'image/png')
end

关于ruby-on-rails - Ruby,RSVG和PNG流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11436873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com