Java Thumbnailator Library:发生IIOException:读取PNG元数据时出错

时间:2018-04-12 10:14:52

标签: java exception base64 metadata

我使用this开放源代码库来创建图像的缩略图。我的任务是将File转换为Base64 String,然后将此String作为请求参数发送到REST服务。我使用此函数将文件转换为客户端的Base64字符串:

public String convertToBase64(File file) throws IOException {
    byte[] bytes = new byte[(int)file.length()];
    FileInputStream fileInputStream = new FileInputStream(file);
    fileInputStream.read(bytes);
    return new String(Base64.encodeBase64(bytes), "UTF-8");
}

然后我检索这个encodedString并将此String作为请求参数发送到REST服务。

在REST服务中,我使用此函数解码此String:

    public static void uploadBase64Image(String file, String filename) throws Exception {
    filename = filename.replaceAll(" ", "_");
    byte[] data = DatatypeConverter.parseBase64Binary
            (file.replaceFirst("data:image/jpg;base64,", "")
                    .replaceFirst("data:image/jpeg;base64,", "")
                    .replaceFirst("data:image/png;base64,", ""));
    File tempFile = File.createTempFile("base64", filename);
    FileUtils.writeByteArrayToFile(tempFile, data);

    FileEntity fe = FileEntity.processAndCompressFile(tempFile, "pic");
    fe.save();
    renderJSON(fe.getJson());
}
  

DatatypeConverter位于package javax.xml.bind;

当我尝试制作此tempFile的缩略图时,会出现此问题。我尝试制作缩略图的代码部分:

private static String compressFileAndGetFilenameWithExt(File originalFile, int height, String filename, String fileExt) throws Exception {
    StringBuilder newFileName = new StringBuilder(filename)
                    .append("_")
                    .append(height)
                    .append(fileExt);
    File compressedFile = new File(filesLocation + newFileName.toString());
    Thumbnails.Builder<File> builder = Thumbnails.of(originalFile);
    builder = builder.height(height);
    builder.toFile(compressedFile);
    return newFileName.toString();
}

我在这行代码中发生了 IIOException:读取PNG元数据错误builder.toFile(compressedFile);

有人可以解释并帮助我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我找到了袋子的解决方案。这是因为我没有配置标头来取文件