Groovy的encodeBase64()为PNG图像文件返回意外的结果

问题描述 投票:0回答:2

我想一个PNG图像文件为Base64编码转换在Groovy。

这里是我的代码:

ImageFile = new File("D:/DATA/CustomScript/Logo.png").text; 
String encoded = ImageFile.getBytes().encodeBase64().toString();

我得到以下结果为:

iVBORw0KGgoAAAANSUhEUgAAAIQAAABPCAIAAAClCfqHAAAABGdBTUEAALE / C / xhBQAAAAlwSFlzAAAOwwAADsMBx2 + oZAAAAQ1JREFUeF7t1KGRgwAURdFVyHQbSwOkKlrIoECDSwusoYgDcz97396Z / 3eGUQxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgzIE2IcxzHP87qu176tJ8T4 / X7Lsuz7fu3b6k1BigEpBqQYP2JAigEpBqQYP2JAigEpBqQYP2JAigEpBqQYP2JAigEpBqQYP2JAigEpBqQYP2JAigEpBqQYP2JAnhNj27ZxHN / V9 / f7vU5385wYn8 / n9XoNwzBN03W6l / P8BwSpsfw4c1 / 6AAAAAElFTkSuQmCC

当通过https://www.base64encode.org/通过了相同的图像给出了这样的结果:

iVBORw0KGgoAAAANSUhEUgAAAIQAAABPCAIAAAClCfqHAAAABGdBTUEAALGPC / xhBQAAAAlwSFlzAAAOwwAADsMBx2 + oZAAAAQ1JREFUeF7t1KGRgwAURdFVyHQbSwOkKlrIoECDSwusoYgDc497396Z / 3eGUQxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgxIMSDFgBQDUgzIE2IcxzHP87qu176tJ8T4 / X7Lsuz7fu3b6k1BigEpBqQYkGJAigEpBqQYkGJAigEpBqQYkGJAigEpBqQYkGJAigEpBqQYkGJAigEpBqQYkGJAigEpBqQYkGJAnhNj27ZxHN / V9 / f7vU5385wYn8 / n9XoNwzBN03W6l / P8BwSpsfw4c1 / 6AAAAAElFTkSuQmCC

我试图强调一些差异。很显然,这两种编码的字符串是不同的。

问题是,我有该图像的Base64编码传递给另一个系统,它是接收来自https://www.base64encode.org/所述一个但拒绝由Groovy的生成的一个。

任何想法,我做错了什么?

groovy encode
2个回答
2
投票

您在这里hiting编码问题。二进制数据不是字符数据;字符数据是由编码实现。相反text的使用文件的bytes。例如。

def f = "/tmp/screenshot-000.png" as File
assert f.bytes.encodeBase64().toString()==("/tmp/encoded_20190208131326.txt" as File).text

0
投票

从用户cfrick答案是非常有帮助的。不幸的是,它并没有解决我的问题。我认为主要原因是,我是在一个旧版本的Groovy。

此代码终于解决了我的问题:

String base64Image = "";
File file = new File(imagePath);
FileInputStream imageInFile = new FileInputStream(file);
byte[] imageData = new byte[file.size()];
imageInFile.read(imageData);
base64Image = Base64.getEncoder().encodeToString(imageData);
© www.soinside.com 2019 - 2024. All rights reserved.