java8 décoder image encodée en base64
Je suis en train d'essayer de décoder une image codée en base64 chaîne avec java.util.Base64 (java8).
Voici la chaîne encodée en base64:
/9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAAExAAIAAAASAAAATgAAAAAAAABgAAAAAQAAAGAAAAABUGFpbnQuTkVUIHYzLjUuMTAA/9sAQwAZERMWExAZFhQWHBsZHiU+KSUiIiVMNzotPlpQX15ZUFdWZHCQemRqiGxWV32qfoiUmaGioWF4sL2vnLuQnqGa/9sAQwEbHBwlISVJKSlJmmdXZ5qampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa/8AAEQgADAAMAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX 29/j5+v/aAAwDAQACEQMRAD8AvazJDPdraSXEcIijMoLuF+c8J19OT+VaWn3QvLGG4GPnXkDse4/OoNJ+cXUzcvJcOCfZTtA/IVny3ktje3cMG0J5u/BGcEqpP6mgD//Z
Il peut être décodé sur http://codebeautify.org/base64-to-image-converter
Quand j'ai essayer de décoder le base64 chaîne d'octets. J'ai eu ce message d'erreur:
java.lang.IllegalArgumentException: Illegal base64 character 20
Voici mon code:
String base64Str = "/9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAAExAAIAAAASAAAATgAAAAAAAABgAAAAAQAAAGAAAAABUGFpbnQuTkVUIHYzLjUuMTAA/9sAQwAZERMWExAZFhQWHBsZHiU+KSUiIiVMNzotPlpQX15ZUFdWZHCQemRqiGxWV32qfoiUmaGioWF4sL2vnLuQnqGa/9sAQwEbHBwlISVJKSlJmmdXZ5qampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa/8AAEQgADAAMAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX 29/j5+v/aAAwDAQACEQMRAD8AvazJDPdraSXEcIijMoLuF+c8J19OT+VaWn3QvLGG4GPnXkDse4/OoNJ+cXUzcvJcOCfZTtA/IVny3ktje3cMG0J5u/BGcEqpP6mgD//Z";
byte[] imageByteArray_new = Base64.getDecoder().decode(base64Str);
Je n'ai aucune idée de ce qui est mal. S'il vous plaît aider, merci
OriginalL'auteur Peter HK | 2015-09-17
Vous devez vous connecter pour publier un commentaire.
Vous avez un espace dans votre chaîne codée, ce qui est un caractère illégal en base64. Si vous l'enlever, il génère toujours la même image dans le convertisseur est lié à, et peut être décodé par votre code.
Mise à JOUR:
Certains décodeurs (comme celle que vous avez lié, ou
Base64.getMimeDecoder()
en Java) ignorer les caractères illégaux, d'autres (commeBase64.getDecoder()
) ne leur permettent pas.jp6vLz9PX
.Pourquoi certains décodeurs de l'ignorer?
Je ne sais pas, mais
Base64.getMimeDecoder()
l'ignore.Merci, ça fonctionne après l'ajout de replaceAll("\\s+","")
OriginalL'auteur Cinnam
Eu le même problème lorsque j'ai reçu le base64 de la Chaîne à travers un @RequestParam, il a reçu le "+" comme " ".
Base64.getDecoder().decode()
m'a donné la même exception (java.lang.IllegalArgumentException: Illégal base64 caractère 20)et
Base64.getMimeDecoder()
simplement ignoré les espaces et enregistré l'image avec des erreurs.correctif:
public byte[] convertImage(String base64) {
String base64Image = base64.replaceAll(" ", "+");
return byte[] imageBytes = java.util.Base64.getDecoder().decode(base64Image);
}
Et il a travaillé pour moi.
OriginalL'auteur Jmoras