首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Scalr调整图像损坏文件的大小

Java Scalr调整图像损坏文件的大小
EN

Stack Overflow用户
提问于 2022-05-24 20:53:17
回答 1查看 97关注 0票数 1

我试图调整PNG图像的大小,将它们转换为数据URL,然后在前端下载它们。整个过程工作正常,但是当我试图在Photoshop中打开文件(例如)时,我得到了“意外的文件结束(EOF)”。只有当我使用Scalr调整图像的大小时,才会发生这种情况。当我在没有调整大小的情况下转换到数据URL时,我没有任何问题。

代码语言:javascript
复制
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块。

EN

回答 1

Stack Overflow用户

发布于 2022-06-03 19:19:00

当您转换为Base64时,每个对齐块由3个输入字节变为4个输出字节。因此,每个输入字节部分影响两个输出字节,因此Base64编码器不能一对一地生成输出字节;编码器必须缓冲一些输入字节并写入输出块。

由于部分字节问题,执行b64.flush()不会有帮助。解决方案是在所有输入字节完成后执行b64.close()。这将导致剩余的部分字节被刷新,并且它将附加特殊的Base64终止字节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72369339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档