Использование стандартного ImageIO API (с JAI ImageIO или другой TIFF плагин), вы должны быть в состоянии сделать это следующим образом:
public static void main(String[] args) throws IOException {
List<BufferedImage> images = Arrays.asList(
new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB),
new BufferedImage(100, 100, BufferedImage.TYPE_BYTE_BINARY),
new BufferedImage(100, 100, BufferedImage.TYPE_BYTE_BINARY)
);
List<String> compression = Arrays.asList("JPEG", "CCITT T.4", "CCITT T.4");
try (ImageOutputStream outputStream = ImageIO.createImageOutputStream(new File(args[0]))) {
ImageWriter tiffWriter = ImageIO.getImageWritersByFormatName("TIFF").next(); // Assumes TIFF plugin installed
tiffWriter.setOutput(outputStream);
if (!images.isEmpty()) {
tiffWriter.prepareWriteSequence(null); // Use default stream metadata
for (int i = 0; i < images.size(); i++) {
// Set up explicit compression for each image
ImageWriteParam param = tiffWriter.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
String compressionType = compression.get(i);
param.setCompressionType(compressionType);
if ("JPEG".equals(compressionType)) {
param.setCompressionQuality(.35f);
}
tiffWriter.writeToSequence(new IIOImage(images.get(i), null, null), param); // Ignoring thumbnail and metadata for now
}
tiffWriter.endWriteSequence();
}
}
}
Приведенный выше код проверяется с помощью TwelveMonkeys TIFFImageWriter
, но он должен хорошо работать с плагином JII ImageIO.
Можете ли вы показать еще какой-нибудь код, пожалуйста? Если вы используете часть ImageIO JAI, вы должны иметь возможность записывать несколько страниц в виде последовательности и передавать отдельный параметр/сжатие для каждого вызова 'writeToSequence (img, param)'. – haraldK
Да, я использовал JAI. Но теперь я стал проще [icafe] (https://github.com/dragon66/icafe/). – Shenal
Благодарим за предложение. Попробуем это – Shenal