Кодирование BufferedImage для Base64 в JRuby (Java)

1

Я динамически создаю BufferedImage и пытаюсь закодировать его на строку Base64, чтобы я мог отображать изображение в шаблоне следующим образом:

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

У меня есть переменная BufferedImage, которую я пытался записать на диск для тестирования, и изображение успешно написано:

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

Как я могу получить строку байтов из переменной @img (без записи на диск), чтобы я мог кодировать ее в Base64 и отображать ее в моем шаблоне?

Теги:
jruby

1 ответ

1
Лучший ответ

Вы можете обернуть 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)
  • 0
    Вы, сэр, джентльмен и ученый. Я должен был удалить символы новой строки из закодированной строки, чтобы заставить это работать все же.
  • 1
    @ MaticJurglič, казалось, все работало нормально, когда я тестировал, вероятно, это зависит от браузера. Вы можете использовать strict_encode64 для генерации строки в кодировке Base 64 без перевода строки, а не для ее последующего удаления.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню