Convertir l'URL de données en BufferedImage
J'ai un Data-URL à partir d'un fichier image et de passer à une autre fonction. Le long de ce chemin d'accès à partir des Données de l'URL de la BufferedImage il doit être un objet byteArray.
ma démarche a été la suivante:
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();
}
Le problème est, il jette toujours la UnknownImageFormatException Exception, ce qui signifie inputImage est null, ce qui signifie que, le ImageIO.lire ne reconnaissent pas l'imagetype.
J'ai utilisé ImageIO.getReaderFormatNames() pour obtenir la pris en charge des noms de fichiers et a obtenu la liste suivante:
Supported Formats:
jpg, BMP, bmp, JPG, jpeg, wbmp, png, JPEG, PNG, WBMP, GIF, gif
La dataURLs j'essaie de passer du type: data:image/png;base64,...
ou data:image/jpg;base64,...
Comme je le comprends, ceux-ci sont pris en charge dans les fichiers et à cet effet, doit être reconnue.
Quoi d'autre pourrait causer la inputImage être null dans ce cas? Et le plus intéressant, comment puis-je le résoudre?
source d'informationauteur Daniel
Vous devez vous connecter pour publier un commentaire.
Que les commentaires déjà dit que l'image les données sont encodées en Base64. Pour récupérer les données binaires, vous avez à la bande/type d'encodage des en-têtes, puis décoder le Base64 content de données binaires.
- Je utiliser
org.apache.commons.codec.binary.Base64
d'apaches commun-codec, d'autres Base64 décodeurs devrait fonctionner aussi bien.Le seul problème avec RFC2397 chaîne est son cahier des charges avec le tout avant de données, mais
data:
et,
facultatif:Si pur Java 8 solution de comptabilité serait:
Bien sûr dataStartIndex doit être vérifié.