1

嗨,我正在做一个项目,我需要对图像的 BASE64 字符串进行更改(jpg)...所以起初当我没有进行任何更改时,ImageReader 工作正常并且我的图像正确显示..但是当我对我的 BASE64 字符串进行更改时,出现了上述异常。一种新型的 ByteStream ...我应该使用什么?或者我的BASE64字符串是什么我需要将它转换为图像..所以我该怎么做?

这是我的代码片段:这是将BASE64字符串转换为图像

 public  static BufferedImage decodeToImage(String imageString) throws IOException {
    BufferedImage image = null;
    byte[] imageByte;
    try {
        BASE64Decoder decoder = new BASE64Decoder();
        imageByte = decoder.decodeBuffer(imageString);
        ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
        image = ImageIO.read(bis);
        bis.close();
    } 
    catch (Exception e) {
        e.printStackTrace();
    }

    ImageIO.write(image, "jpg", new File("d:/CopyOfTestImage.jpg"));

    return image;
   }
4

2 回答 2

2

查看 ImageIO.read 的Javadocs

返回 aBufferedImage作为解码提供的结果的结果,该结果是InputStreamImageReader当前注册的那些中自动选择的。被InputStream包裹在一个ImageInputStream. 如果没有注册ImageReader的声明能够读取结果流,null则返回。[强调我的]

read 方法可以返回null,但您没有对此进行检查。实际上,该方法可能返回 null,这就是为什么ImageIO.write当您将 null 传递给它时会引发异常。

首先,您需要检查错误情况并适当地处理它们(包括 null 返回,还包括您当前捕获并忽略的任何抛出的异常)。

现在,如果您从 ImageIO.read 返回 null,这意味着您传递给 read 方法的字节似乎不是任何已知格式的有效图像。您需要更详细地查看您对 base64 字符串所做的修改,并确保您所做的事情是有效的,并产生有效的图像。或者,如果您抛出了一些其他异常,那么您需要适当地处理它。

(作为一般规则,不要丢弃/跳过错误,因为当出现问题时你不知道为什么!)

于 2013-06-28T10:14:41.977 回答
1

改变这一行:

ImageIO.write(image, "jpg", new File("d:/CopyOfTestImage.jpg"));

像这样

image = ImageIO.read(getClass().getResource("/resources/CopyOfTestImage.jpg"));
于 2013-06-28T10:21:43.840 回答