Ich habe eine Daten-URL aus einer Bilddatei und muss sie an eine andere Funktion übergeben. Entlang diesem Pfad von Data-URL zu BufferedImage muss es ein ByteArray sein.Konvertiere Daten-URL in BufferedImage
mein Ansatz war die folgende:
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();
}
Das Problem ist, es wirft immer die UnknownImageFormatException Ausnahme, was bedeutet, inputImage null ist, was bedeutet, die ImageIO.read nicht die imagetype erkannte.
Ich habe ImageIO.getReaderFormatNames verwendet(), um die unterstützten Dateinamen zu erhalten und bekam die folgende Liste:
Supported Formats:
jpg, BMP, bmp, JPG, jpeg, wbmp, png, JPEG, PNG, WBMP, GIF, gif
Die dataURLs Ich versuche, sind zu passieren wie: data:image/png;base64,...
oder data:image/jpg;base64,...
Soweit Ich verstehe, dass diese in der unterstützten Dateiliste sind und daher erkannt werden sollten.
Was könnte sonst dazu führen, dass das inputImage in diesem Fall null ist? Und interessanter, wie löse ich es?
Sie müssen den String von base64 zurück in ein Binärformat dekodieren, das ImageIO lesen kann, oder, wenn Sie ein URL-Objekt haben, leiten Sie es direkt an ImageIO – MadProgrammer
Weiter zum Rat von @MadProgrammer können Sie den [' DatatypeConverter '] (http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/DatatypeConverter.html#method_summary), um die Basis-64-Zeichenfolge zurück in ein 'byte []' zu konvertieren. –