【发布时间】:2013-09-05 08:22:02
【问题描述】:
我有一个来自图像文件的数据 URL,并且必须将它传递给另一个函数。沿着从 Data-URL 到 BufferedImage 的这条路径,它需要是一个 byteArray。
我的方法如下:
String dataUrl;
byte[] imageData = dataUrl.getBytes();
// pass the byteArray along the path
// create BufferedImage from byteArray
BufferedImage inputImage = ImageIO.read(new ByteArrayInputStream(imageData));
// If the picture is null, then throw an unsupported image exception.
if (inputImage == null) {
throw new UnknownImageFormatException();
}
问题是,它总是抛出UnknownImageFormatException异常,表示inputImage为null,表示ImageIO.read没有识别imagetype。
我使用 ImageIO.getReaderFormatNames() 来获取支持的文件名并得到以下列表:
Supported Formats:
jpg, BMP, bmp, JPG, jpeg, wbmp, png, JPEG, PNG, WBMP, GIF, gif
我尝试传递的 dataURL 如下:data:image/png;base64,... 或 data:image/jpg;base64,...
据我了解,这些都在受支持的文件列表中,因此应该被识别。
在这种情况下,还有什么可能导致 inputImage 为空?更有趣的是,我该如何解决?
【问题讨论】:
-
您需要将字符串从 base64 解码回 ImageIO 可以读取的二进制格式,或者,如果您有一个 URL 对象,可以将其直接传递给 ImageIO
-
根据@MadProgrammer 的建议,您可以使用
DatatypeConverter将base 64 字符串转换回byte[]。
标签: java bufferedimage javax.imageio data-url