【问题标题】:How to display an image which is in bytes to JSP page using HTML tags?如何使用 HTML 标记向 JSP 页面显示以字节为单位的图像?
【发布时间】:2010-10-30 22:23:46
【问题描述】:

我有 ByteArrayOutputStream,其中包含以字节为单位的 JPEG 图像。我的要求是在JSP 页面中显示该图像(使用 HTML 标记在前端显示图像)。我该怎么做?

我已经提到了BufferedImage 课程,但这让我感到困惑,因为我是新手。

【问题讨论】:

    标签: java html jsp image


    【解决方案1】:

    除非您使用"data" URI(对小图像有用),否则浏览器将发出两个请求:一个请求 HTML,另一个请求图像。您需要能够输出 img 标签,其中包含足够的信息,以便您使用 ByteArrayOutputStream 中的数据响应后续对图像的请求。

    根据您获取该 JPEG 文件的方式以及您的服务器如何横向扩展,这可能涉及将图像写入磁盘、将其缓存在内存中、重新生成它或这些的任意组合。

    如果您可以延迟图像生成,直到浏览器首先请求实际图像,这是非常理想的。这可能涉及在图像的 URL 中添加额外的参数 - 例如图表上的点,或要生成的缩略图的大小,或者您的图像是什么。

    如果您不熟悉 JSP 和 HTML,我强烈建议您首先关注 HTML 方面。在确定如何动态提供服务之前,先确定您需要提供什么服务以及浏览器会做什么。从 HTML 和图像的静态页面和文件开始,然后研究如何生成它们。

    【讨论】:

      【解决方案2】:

      如果图片不是太大,可以如下操作。

      <img src="data:image/jpg;base64,iVBORw0KGgoAAAANS..." />
      

      其中iVBORw0KGgoAAAANS... 是Base64 编码字节。

      Base64 编码可以通过库完成,例如 Ostermiller Java Utilities' Base64 Java Libraryorg.apache.commons.codec.binary.Base64

      【讨论】:

      • 此方法将图像内联到正在渲染的 html 中,这也可以增加文件大小
      • 我的图像非常小。它是一个尺寸为 width="166" height="44" 的条形码图像。在上面,我如何从 ByteArrayOutputStream 获取图像?
      • 166x44 并不是完全“非常小”(通常数据 URI 用于非常小的图像),但使用条形码您可能会侥幸逃脱。基本上你需要对数据进行base64编码。这是一个单独的、非常具体的问题——可能已经在 Stack Overflow 的其他地方讨论过。
      • 来自 ByteArrayInputStream,并使用 Commons : List aList = new ArrayList(); int cByte = bais.read(); while (cByte != null) { aList.add(cByte); cByte = bais.read(); } byte[] 结果 = Base64.encode(aList.toArray()); String imageData = new String(result) 并且可以使用 imageData。
      猜你喜欢
      • 1970-01-01
      • 2015-01-08
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 2019-09-29
      • 1970-01-01
      • 2011-09-14
      相关资源
      最近更新 更多