【问题标题】:Convert image data InputStream to string and from this string back to image does not gives the image将图像数据 InputStream 转换为字符串,并从该字符串返回图像不给出图像
【发布时间】:2017-09-02 12:51:22
【问题描述】:

Cq5 图像组件有二进制图像数据,我需要将此数据暴露在 api 中。

为此,我尝试获取输入流并将其读取为字符串。

InputStream is = jcrnode.getProperty(JcrConstants.JCR_DATA).getBinary().getStream();

String imageData = jcrnode.getProperty(JcrConstants.JCR_DATA).getString();

当尝试将字符串写入 FileOutputStream 时,我没有得到图像。

在尝试手动下载 jcr:data 并打开文件时,图像查看器会提供图像。 但是当将其转换为字符串并返回时对我不起作用。对此有何建议。

【问题讨论】:

  • 为什么需要将其转换为字符串?字符串看起来像垃圾。
  • 不知道为什么会这样,但你可以使用String imageData = Base64.encodeBytes(jcrnode.getProperty(JcrConstants.JCR_DATA));,然后在`" />.这就是您引用嵌入图像的方式。
  • 需要通过api将图片jcr:data暴露给其他环境消费,发送图片文件。关于实现这一目标的最佳方法的任何建议。我尝试编码图像二进制并解码并返回图像。在 java 6 上看起来对我来说很难。任何例子
  • 图像数据可以从 API 公开为 base64 编码字符串。请参阅我上面关于如何做到这一点的评论。
  • 如何将图片数据作为Base64编码字节转换为数据uri。

标签: java image aem fileinputstream


【解决方案1】:

感谢@i.net 能够按照您上面的建议解决。

StringBuilder dataUri = New StringBuilder(); dataUri.append("data:image/jpeg;base64"); dataUri.append(StringUtils.newString Utf8(Base64.encodeBase64(imageByteArray,false)));

dataUri.toString() 是可以用作嵌入图像的字符串。

下面的示例 html 以呈现 base64 图像

<div>
  <p>refer wiki</p>
  <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
    AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
        9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />
</div>

【讨论】:

  • 是的,这就是它的关键所在。您必须对 HTTP 传输的二进制文件进行 Base64 编码。您甚至可以从 DAM 属性中获取 MIME 类型,使其更通用。
猜你喜欢
  • 2018-09-07
  • 2019-02-12
  • 2013-07-23
  • 2014-07-21
  • 2020-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
相关资源
最近更新 更多