Ho un URL dati da un file immagine e devo passarlo a un'altra funzione. Lungo questo percorso da Data-URL a BufferedImage deve essere un byteArray.Converti dati-URL in bufferImmagine
il mio approccio è stato il seguente:
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();
}
Il problema è, si getta sempre l'eccezione UnknownImageFormatException, il che significa che inputImage è nullo, il che significa, l'ImageIO.read non ha riconosciuto l'imagetype.
Ho usato ImageIO.getReaderFormatNames() per ottenere i nomi dei file supportati ed ha ottenuto il seguente elenco:
Supported Formats:
jpg, BMP, bmp, JPG, jpeg, wbmp, png, JPEG, PNG, WBMP, GIF, gif
I dataURLs provo a passare sono come: data:image/png;base64,...
o data:image/jpg;base64,...
Per quanto riguarda Capisco, quelli sono nella lista dei file supportati e quindi dovrebbero essere riconosciuti.
Cos'altro potrebbe causare l'inputImage in questo caso? E più interessante, come lo risolvo?
È necessario decodificare la stringa da base64 a un formato binario che ImageIO può leggere, oppure, se si dispone di un oggetto URL, magari passare direttamente a ImageIO – MadProgrammer
Oltre al consiglio di @MadProgrammer è possibile utilizzare il [' DatatypeConverter'] (http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/DatatypeConverter.html#method_summary) per convertire la stringa 64 di base in un 'byte []'. –