Я динамически создаю BufferedImage и пытаюсь закодировать его на строку Base64, чтобы я мог отображать изображение в шаблоне следующим образом:
<img src="data:image/gif;base64, [base 65 string]>
У меня есть переменная BufferedImage, которую я пытался записать на диск для тестирования, и изображение успешно написано:
ImageIO.write(@img, "gif", Java::JavaIo::File.new(filename))
Как я могу получить строку байтов из переменной @img (без записи на диск), чтобы я мог кодировать ее в Base64 и отображать ее в моем шаблоне?
Вы можете обернуть StringIO
в org.jruby.util.IOOutputStream
с to_outputstream
метода to_outputstream
и записать на него, а затем получить байты со StringIO#string
:
sio = StringIO.new
outputstream = sio.to_outputstream
ImageIO.write(@img, "gif", outputstream)
encoded = Base64.encode64(sio.string)
strict_encode64
для генерации строки в кодировке Base 64 без перевода строки, а не для ее последующего удаления.