在Java中将多页TIFF转换为Base64字符串

时间:2019-03-14 07:02:34

标签: java image base64

下面的代码应该将图像转换为其Base64字符串。它可以工作,但对于TIF,只有第一个“页面”被转换,并且后续的页面/部分丢失。

    BASE64Decoder decoder = new BASE64Decoder();
    byte[] decodedBytes = null;
    File file = new File("newtif.tif");
    try {
        FileOutputStream fop;
        decodedBytes = new BASE64Decoder().decodeBuffer(imageString);
        fop = new FileOutputStream(file);
        fop.write(decodedBytes);
        fop.flush();
        fop.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

我从一个实际的多页TIF文件中获得了imageString,并使用以下命令将其转换为Base64:

        BufferedImage image = ImageIO.read(new File(fileLocation));
        BufferedImage newImg;

        ByteArrayOutputStream bos = new ByteArrayOutputStream();

        ImageIO.write(image, "tif", bos);
        byte[] imageBytes = bos.toByteArray();

        BASE64Encoder encoder = new BASE64Encoder();
        imageString = encoder.encode(imageBytes);

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您不能仅使用ImageIO读取方法读取所有tif图像。在该示例中,您仅读取第一张图像,因为那是该API所做的。

请参阅: Can't read and write a TIFF image file using Java ImageIO standard library

答案 1 :(得分:0)

您的编码器有问题。这是一个问题,因为Java不支持gif和tif文件的多个“框架”。

您需要修改编码器以发出base64字符串,而无需将其传递给Java图像类。

这可以使用Files.readAllBytes完成,它直接从文件创建了一个字节数组,并且不尝试将其读取为图像。

    byte[] imageBytes = Files.readAllBytes(new File(fileLocation).toPath());
    BASE64Encoder encoder = new BASE64Encoder();
    imageString = encoder.encode(imageBytes);