java java8解码以base64编码的图像

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/32636725/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 20:32:34  来源:igfitidea点击:

java8 decode image which encoded in base64

javabase64decode

提问by Peter HK

I am trying to decode a image which encoded in base64 string with java.util.Base64 (java8).

Here is the base64 encoded string:

我正在尝试使用 java.util.Base64 (java8) 解码以 base64 字符串编码的图像。

这是 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

It can be decoded on http://codebeautify.org/base64-to-image-converter

它可以在http://codebeautify.org/base64-to-image-converter上解码



When I try to decode the base64 string to byte. I got this error message:



当我尝试将 base64 字符串解码为字节时。我收到此错误消息:

java.lang.IllegalArgumentException: Illegal base64 character 20


Here is my 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);

I have no idea of what is wrong. Please help, thanks

我不知道出了什么问题。请帮忙,谢谢

回答by Cinnam

You have a space in your encoded string, which is an illegal character in base64. If you remove it, it still generates the same image in the converter you linked to, and can be now decoded by your code as well.

您的编码字符串中有一个空格,这是 base64 中的非法字符。如果您删除它,它仍然会在您链接到的转换器中生成相同的图像,并且现在也可以通过您的代码进行解码。

UPDATE:

更新:

Some decoders (like the one you linked, or Base64.getMimeDecoder()in Java) ignore illegal characters, others (like Base64.getDecoder()) don't allow them.

某些解码器(如您链接的解码器或Base64.getMimeDecoder()Java 中的解码器)会忽略非法字符,而其他解码器(如Base64.getDecoder())则不允许使用它们。

回答by Jmoras

Had the same problem when I recieved the base64 String throught a @RequestParam, it recieved "+" as " ".

当我通过@RequestParam 收到 base64 字符串时遇到了同样的问题,它收到了“+”作为“”。

Base64.getDecoder().decode()gave me the same exception (java.lang.IllegalArgumentException: Illegal base64 character 20) and Base64.getMimeDecoder()just ignored the spaces and saved the image with errors.

Base64.getDecoder().decode()给了我同样的异常(java.lang.IllegalArgumentException: Illegal base64 character 20),Base64.getMimeDecoder()只是忽略了空格并保存了有错误的图像。

fix:

使固定:

public byte[] convertImage(String base64) { String base64Image = base64.replaceAll(" ", "+"); return byte[] imageBytes = java.util.Base64.getDecoder().decode(base64Image); }

public byte[] convertImage(String base64) { String base64Image = base64.replaceAll(" ", "+"); return byte[] imageBytes = java.util.Base64.getDecoder().decode(base64Image); }

And it worked for me.

它对我有用。