У меня есть URL-адрес данных из файла изображения и должен передать его другой функции. По этому пути от URL-адреса данных к BufferedImage он должен быть байтом.Преобразование URL-адреса данных в BufferedImage
мой подход был следующим:
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 Exception, что означает inputImage имеет нулевое значение, что означает, то ImageIO.read не признают IMAGETYPE.
Я использовал ImageIO.getReaderFormatNames(), чтобы получить поддерживаемые имена файлов и получил следующий список:
Supported Formats:
jpg, BMP, bmp, JPG, jpeg, wbmp, png, JPEG, PNG, WBMP, GIF, gif
The dataURLs я пытаюсь передать Походят: data:image/png;base64,...
или data:image/jpg;base64,...
Насколько Я понимаю, что они находятся в поддерживаемом списке файлов и поэтому должны быть распознаны.
Что еще может привести к тому, что inputImage будет пустым в этом случае? И еще интереснее, как я могу его решить?
Вам необходимо декодировать строку из base64 обратно в двоичный формат, который может считывать ImageIO, или, если у вас есть объект URL, возможно, передать его непосредственно в ImageIO – MadProgrammer
. В дополнение к совету @MadProgrammer вы можете использовать [ DatatypeConverter'] (http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/DatatypeConverter.html#method_summary), чтобы преобразовать базовую строку 64 в 'byte []'. –