下面的代码应该将图像转换为其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);
提前感谢您的帮助!
答案 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);