将图像转换为byteArray保持颜色

时间:2014-09-28 17:56:34

标签: java jsp servlets image-processing

我尝试将图像转换为byteArray,然后使用HttpServlet类中的BufferedOutputStream将其打印在我的jsp页面上,并使用以下代码:

public byte[] extractBytes(String imagePath) {
        byte[] imageInByte = new byte[0];
        try {
            ByteArrayOutputStream baos = null;
            BufferedImage originalImage = ImageIO.read(new File(imagePath));

            baos = new ByteArrayOutputStream();
            ImageIO.write(originalImage, "jpg", baos);
            baos.flush();
            imageInByte = baos.toByteArray();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return imageInByte;
    }

要打印它:

            imageInByte = extractBytes(requestedUrl);

            response.setContentType(
            "image/jpeg");
            response.setContentLength(imageInByte.length);

            response.setHeader(
            "Content-Disposition", "inline; filename=\"" + name
            + "\"");

            BufferedInputStream input = null;
            BufferedOutputStream output = null;
            time = System.currentTimeMillis();
            input = new BufferedInputStream(new ByteArrayInputStream(imageInByte));
            output = new BufferedOutputStream(response.getOutputStream());
            byte[] buffer = new byte[8192];
            int length;

            while ((length = input.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }

然而,结果图像失去了颜色。

Before After

问题出在byteArray转换部分,我猜。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

有两个字节数组转换,一个是在读取文件时进入字节数组缓冲区,另一个是在写入http响应流时。

1) 您可以尝试写入文件以确认是哪种情况。 从我所看到的here,阅读代码似乎没问题。

2) 你是否确定在输出流的情况下你正在写和刷新?

3) 您还可以尝试为内容类型添加http响应标头以帮助浏览器。