我试图调整PNG图像的大小,将它们转换为数据URL,然后在前端下载它们。整个过程工作正常,但是当我试图在Photoshop中打开文件(例如)时,我得到了“意外的文件结束(EOF)”。只有当我使用Scalr调整图像的大小时,才会发生这种情况。当我在没有调整大小的情况下转换到数据URL时,我没有任何问题。
public String designToDataURL(Design design, Integer width, Integer height)
throws IOException {
URL url = new URL(design.getPreviewUrl());
BufferedImage bufferedImage = ImageIO.read(url);
// If I comment this line, everything works quite fine:
BufferedImage resized = Scalr.resize(bufferedImage, width, height);
ByteArrayOutputStream os = new ByteArrayOutputStream();
OutputStream b64 = new Base64.OutputStream(os);
ImageIO.write(bufferedImage, "png", b64);
return os.toString("UTF-8");
}我做错了什么?
编辑:使用https://www.nayuki.io/page/png-file-chunk-inspector检查PNG块。

发布于 2022-06-03 19:19:00
当您转换为Base64时,每个对齐块由3个输入字节变为4个输出字节。因此,每个输入字节部分影响两个输出字节,因此Base64编码器不能一对一地生成输出字节;编码器必须缓冲一些输入字节并写入输出块。
由于部分字节问题,执行b64.flush()不会有帮助。解决方案是在所有输入字节完成后执行b64.close()。这将导致剩余的部分字节被刷新,并且它将附加特殊的Base64终止字节。
https://stackoverflow.com/questions/72369339
复制相似问题