2014-06-15 27 views
1

我动态创建一个BufferedImage,并试图将其编码为Base64字符串,这样我可以像这样在模板中显示的图像:编码的BufferedImage为Base64在JRuby中(JAVA)

<img src="data:image/gif;base64, [base 65 string]> 

我有一个BufferedImage变量,我试着写磁盘测试和图像被成功地写到:

ImageIO.write(@img, "gif", Java::JavaIo::File.new(filename)) 

我怎样才能获得从@img可变字节字符串(不写入磁盘),这样我可以编码成Base64和将其显示在我的模板中?

回答

1

你可以用在org.jruby.util.IOOutputStream一个StringIOto_outputstream方法和写入,然后拿到个字节StringIO#string

sio = StringIO.new 
outputstream = sio.to_outputstream 

ImageIO.write(@img, "gif", outputstream) 

encoded = Base64.encode64(sio.string) 
+0

你的先生,是一个绅士和学者。我不得不从编码字符串中删除换行符,以使其工作。 –

+1

@MaticJurglič当我测试时它似乎工作正常,它可能取决于浏览器。您可以使用['strict_encode64'](http://ruby-doc.org/stdlib-2.1.2/libdoc/base64/rdoc/Base64.html#method-i-strict_encode64)生成不带换行符的Base 64编码字符串而不是之后剥离它们。 – matt