2014-06-15 28 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