【问题标题】:How to convert byte array to image [duplicate]如何将字节数组转换为图像[重复]
【发布时间】:2011-10-25 19:58:53
【问题描述】:

我有一个 SQL 数据库,其中包含存储为字节数组的图像。我已经进行了一些搜索,但没有找到太多关于如何将这些转换为 JSF 页面可用的图像类型的信息。任何帮助将不胜感激!

提前致谢!

(使用 JSF 2.0)

【问题讨论】:

  • 这取决于图像是如何转换成字节数组的。
  • 您是否可以编写一段代码来创建适当大小的 java.awt.image.BufferedImage,将字节组转换为 java.awt.Color 对象,并使用 getRGB Color对象的()方法得到一个RGB值给BufferedImage的setRGB()方法?
  • 我尝试了类似 ' image logo; EventDTO 事件; logo = toolkit.createImage(event.getLogo());'

标签: jakarta-ee jsf-2


【解决方案1】:

只需创建一个控制器来输出正确的媒体类型(image/*) 并输出字节。无需转换任何内容。如果您想处理图像,可以使用ImageIO.read 进行转换。但是从您的问题看来,您只想显示图像。

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    byte[] bytes = ...  
    resp.setContentType(mimeType);    
    OutputStream out = resp.getOutputStream();
    out.write(bytes);
}

【讨论】:

  • 好的,我很抱歉造成混乱,是的,我只想展示它,任何指向任何材料的指针都会有所帮助。非常感谢您的宝贵时间!
  • 或者对“只是创建一个输出正确媒体类型(图像/*)并输出字节的控制器”的一些额外解释。
  • 看这个例子exampledepot.com/egs/javax.servlet/GetImage.html。您应该从数据库中读取,而不是从文件中读取。
【解决方案2】:

尝试做类似this的事情。

【讨论】:

    【解决方案3】:

    这不是一个工作示例,但它概述了如何动态显示存储在数据库中的图像的方法。您必须创建一个 servlet(取决于您使用的框架,它可能是一个 struts 动作等),其行为类似于图像:

    @WebServlet("/images/*")
    public class ImageServlet extends HttpServlet {
    
        @Override
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    
            /* this is pseudo code, retrieve the image and its metadata from database.
             * Maybe you do not want to use a parameter but a RESTful approach, e.g. '/images/image1234'.
             */
            MyImage myimg = MyDatabase.getImage(request.getParameter("imageID"));
    
            /* you may want to support different encodings (e.g. JPG, PNG, TIFF) */
            response.setContentType(myimg.getContentType());
    
            /* obtain output stream and stream the bytes back to the client */
            OutputStream out = response.getOutputStream();
    
            /* stream it, here you have different options, finally close the stream */
            out.write(myimg.getBytes());
        }
    
    }
    

    在您的 JSF 页面中,您必须相应地引用 servlet:

    <img src=".../images/image1234" />
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 2011-06-01
      • 2023-03-09
      相关资源
      最近更新 更多