今天编程出现的情况,BASE64的字符串是由echarts2 转化出来的。按照下面的代码进行转化,public static boolean generateImage(String path) {
//由于不在工作机上,所以下面的字符串,是我随便在网上找个代替
String imgStr="data:image/png;base64,R0lGODlhAQAcALMAAMXh96HR97XZ98Hf98Xg97DX97nb98Lf97vc98Tg973d96rU97ba97%2Fe96XS9wAAACH5BAAAAAAALAAAAAABABwAAAQVMLhVBDNItXESAURyDI2CGIxQLE4EADs%3D";
if (imgStr == null)
return false;
BASE64Decoder decoder = new BASE64Decoder();
try {
// 解密
byte[] b = decoder.decodeBuffer(imgStr);
// 处理数据
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
OutputStream out = new FileOutputStream(path);
out.write(b);
out.flush();
out.close();
return true;
} catch (Exception e) {
return false;
}
}这样生成的PNG图片,所有的图片查看器都无法看,应该是个损坏的文件。
接着我就把data:image/png;base64,去掉了,结果就出现很奇怪现象,光影看看打开PNG的文件显示的是损坏的无法打开。
而用WIN7自带的看图和编辑软件都能看到。
同样的情况也出现在WPS和OFFICE WORD里,WPS里图片能拉进去但是显示的是全透明的图片,而OFFICE WORD能正常显示。
请大神帮忙解答一下为什么会出现这种情况
//由于不在工作机上,所以下面的字符串,是我随便在网上找个代替
String imgStr="data:image/png;base64,R0lGODlhAQAcALMAAMXh96HR97XZ98Hf98Xg97DX97nb98Lf97vc98Tg973d96rU97ba97%2Fe96XS9wAAACH5BAAAAAAALAAAAAABABwAAAQVMLhVBDNItXESAURyDI2CGIxQLE4EADs%3D";
if (imgStr == null)
return false;
BASE64Decoder decoder = new BASE64Decoder();
try {
// 解密
byte[] b = decoder.decodeBuffer(imgStr);
// 处理数据
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
OutputStream out = new FileOutputStream(path);
out.write(b);
out.flush();
out.close();
return true;
} catch (Exception e) {
return false;
}
}这样生成的PNG图片,所有的图片查看器都无法看,应该是个损坏的文件。
接着我就把data:image/png;base64,去掉了,结果就出现很奇怪现象,光影看看打开PNG的文件显示的是损坏的无法打开。
而用WIN7自带的看图和编辑软件都能看到。
同样的情况也出现在WPS和OFFICE WORD里,WPS里图片能拉进去但是显示的是全透明的图片,而OFFICE WORD能正常显示。
请大神帮忙解答一下为什么会出现这种情况
https://zh.wikipedia.org/wiki/PNG PNG文件包括8字节文件署名(89 50 4E 47 0D 0A 1A 0A,十六进制),用来识别PNG格式。