【问题标题】:Encoding BufferedImage to Base64 in JRuby (Java)在 JRuby (Java) 中将 BufferedImage 编码为 Base64
【发布时间】:2014-06-16 02:40:20
【问题描述】:

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

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

我有一个 BufferedImage 变量,我尝试将其写入磁盘进行测试,并且图像被成功写入:

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

如何从@img 变量中获取字节字符串(不写入磁盘),以便将其编码为 Base64 并在模板中显示?

【问题讨论】:

    标签: java ruby-on-rails ruby jruby


    【解决方案1】:

    您可以使用to_outputstream 方法将StringIO 包装在org.jruby.util.IOOutputStream 中并写入其中,然后使用StringIO#string 获取字节:

    sio = StringIO.new
    outputstream = sio.to_outputstream
    
    ImageIO.write(@img, "gif", outputstream)
    
    encoded = Base64.encode64(sio.string)
    

    【讨论】:

    • 您先生,是一位绅士和一位学者。我必须从编码字符串中删除换行符才能使其正常工作。
    • @MaticJurglič 我测试时它似乎工作正常,这可能取决于浏览器。您可以使用strict_encode64 生成不带换行符的 Base 64 编码字符串,而不是在之后剥离它们。
    猜你喜欢
    • 2012-10-18
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2014-04-18
    • 2017-07-24
    相关资源
    最近更新 更多