我无法显示 base 64 编码的图像?
I am not able to display a base 64 encoded image?
1) 以下是我对图像进行编码的方法--
StringBuilder prefixToImageEncodedString=new StringBuilder("data:image/*;base64,");
InputStream in =new BufferedInputStream(new FileInputStream("D:/resources/Australia.jpg"));
byte[] bytes=ImageIO.read(in).toString().getBytes();
String encodedfile = new String(Base64.encode(bytes), "UTF-8");
String imageBaseURL=prefixToImageEncodedString.append(encodedfile).toString();
我得到以下输出:-
data:image/*;base64,QnVmZmVyZWRJbWFnZUAxMzA5OWNjOiB0eXBlID0gNSBDb2xvck1vZGVsOiAjcGl4ZWxCaXRzID0gMjQgbnVtQ29tcG9uZW50cyA9IDMgY29sb3Igc3BhY2UgPSBqYXZhLmF3dC5jb2xvci5JQ0NfQ29sb3JTcGFjZUAxYzEyMWI2IHRyYW5zcGFyZW5jeSA9IDEgaGFzIGFscGhhID0gZmFsc2UgaXNBbHBoYVByZSA9IGZhbHNlIEJ5dGVJbnRlcmxlYXZlZFJhc3Rlcjogd2lkdGggPSAxODggaGVpZ2h0ID0gMTE5ICNudW1EYXRhRWxlbWVudHMgMyBkYXRhT2ZmWzBdID0gMg==
在前端(AngularJS),当我通过设置字符串显示图片时,它不显示图像。
<img src="{{countryImageNew}}" class="img1">
需要指导。
尝试使用
<img [src]="countryImageNew" class="img1">
将 src
括在方括号中告诉 Angular 用变量值替换该值。否则,文字字符串 'countryImageNew' 是设置为源的内容,而不是变量的值。
使用
<img ng-attr-src="{{countryImageNew}}" class="img1">
或者
<img ng-src="{{countryImageNew}}" class="img1">
<img src="data:image/*;base64,QnVmZmVyZWRJbWFnZUAxMzA5OWNjOiB0eXBlID0gNSBDb2xvck1vZGVsOiAjcGl4ZWxCaXRzID0gMjQgbnVtQ29tcG9uZW50cyA9IDMgY29sb3Igc3BhY2UgPSBqYXZhLmF3dC5jb2xvci5JQ0NfQ29sb3JTcGFjZUAxYzEyMWI2IHRyYW5zcGFyZW5jeSA9IDEgaGFzIGFscGhhID0gZmFsc2UgaXNBbHBoYVByZSA9IGZhbHNlIEJ5dGVJbnRlcmxlYXZlZFJhc3Rlcjogd2lkdGggPSAxODggaGVpZ2h0ID0gMTE5ICNudW1EYXRhRWxlbWVudHMgMyBkYXRhT2ZmWzBdID0gMg==">
我认为编码不好,否则上述方法必须有效。
我建议像 -
这样的 Base64 编码
Base64.encode(FileUtils.readFileToByteArray(file));
这不是您从文件中读取字节的方式:
byte[] bytes=ImageIO.read(in).toString().getBytes();
ImageIO.read returns 一个 BufferedImage。 BufferedImage的toString()方法并没有return图片的字节,事实上也不能,因为Java字符串不是字节容器。它们包含字符,而不是字节。尝试假设一个 String 包含字节会导致字节损坏;具体来说,String.getBytes() encodes 字符串的代码点使用字符集编码转换。
您根本不应该使用 ImageIO。您没有对数据做任何与图像相关的事情;你只需要字节:
byte[] bytes = Files.readAllBytes(Paths.get("D:/resources/Australia.jpg"));
此外,由于字符串不是字节的安全容器,因此不要使用 new String(Base64.encode(bytes), "UTF-8")
。这 将 破坏您的一些字节。创建 Base 64 编码字符串的正确方法是使用 encodeToString 方法:
String encodedfile = Base64.getEncoder().encodeToString(bytes);
1) 以下是我对图像进行编码的方法--
StringBuilder prefixToImageEncodedString=new StringBuilder("data:image/*;base64,");
InputStream in =new BufferedInputStream(new FileInputStream("D:/resources/Australia.jpg"));
byte[] bytes=ImageIO.read(in).toString().getBytes();
String encodedfile = new String(Base64.encode(bytes), "UTF-8");
String imageBaseURL=prefixToImageEncodedString.append(encodedfile).toString();
我得到以下输出:-
data:image/*;base64,QnVmZmVyZWRJbWFnZUAxMzA5OWNjOiB0eXBlID0gNSBDb2xvck1vZGVsOiAjcGl4ZWxCaXRzID0gMjQgbnVtQ29tcG9uZW50cyA9IDMgY29sb3Igc3BhY2UgPSBqYXZhLmF3dC5jb2xvci5JQ0NfQ29sb3JTcGFjZUAxYzEyMWI2IHRyYW5zcGFyZW5jeSA9IDEgaGFzIGFscGhhID0gZmFsc2UgaXNBbHBoYVByZSA9IGZhbHNlIEJ5dGVJbnRlcmxlYXZlZFJhc3Rlcjogd2lkdGggPSAxODggaGVpZ2h0ID0gMTE5ICNudW1EYXRhRWxlbWVudHMgMyBkYXRhT2ZmWzBdID0gMg==
在前端(AngularJS),当我通过设置字符串显示图片时,它不显示图像。
<img src="{{countryImageNew}}" class="img1">
需要指导。
尝试使用
<img [src]="countryImageNew" class="img1">
将 src
括在方括号中告诉 Angular 用变量值替换该值。否则,文字字符串 'countryImageNew' 是设置为源的内容,而不是变量的值。
使用
<img ng-attr-src="{{countryImageNew}}" class="img1">
或者
<img ng-src="{{countryImageNew}}" class="img1">
<img src="data:image/*;base64,QnVmZmVyZWRJbWFnZUAxMzA5OWNjOiB0eXBlID0gNSBDb2xvck1vZGVsOiAjcGl4ZWxCaXRzID0gMjQgbnVtQ29tcG9uZW50cyA9IDMgY29sb3Igc3BhY2UgPSBqYXZhLmF3dC5jb2xvci5JQ0NfQ29sb3JTcGFjZUAxYzEyMWI2IHRyYW5zcGFyZW5jeSA9IDEgaGFzIGFscGhhID0gZmFsc2UgaXNBbHBoYVByZSA9IGZhbHNlIEJ5dGVJbnRlcmxlYXZlZFJhc3Rlcjogd2lkdGggPSAxODggaGVpZ2h0ID0gMTE5ICNudW1EYXRhRWxlbWVudHMgMyBkYXRhT2ZmWzBdID0gMg==">
我认为编码不好,否则上述方法必须有效。 我建议像 -
这样的 Base64 编码Base64.encode(FileUtils.readFileToByteArray(file));
这不是您从文件中读取字节的方式:
byte[] bytes=ImageIO.read(in).toString().getBytes();
ImageIO.read returns 一个 BufferedImage。 BufferedImage的toString()方法并没有return图片的字节,事实上也不能,因为Java字符串不是字节容器。它们包含字符,而不是字节。尝试假设一个 String 包含字节会导致字节损坏;具体来说,String.getBytes() encodes 字符串的代码点使用字符集编码转换。
您根本不应该使用 ImageIO。您没有对数据做任何与图像相关的事情;你只需要字节:
byte[] bytes = Files.readAllBytes(Paths.get("D:/resources/Australia.jpg"));
此外,由于字符串不是字节的安全容器,因此不要使用 new String(Base64.encode(bytes), "UTF-8")
。这 将 破坏您的一些字节。创建 Base 64 编码字符串的正确方法是使用 encodeToString 方法:
String encodedfile = Base64.getEncoder().encodeToString(bytes);