我想將2個jpeg圖像編碼爲3頁的TIFF文件。規格如下。用不同的壓縮方式創建多頁TIFF
- JPEG壓縮用的圖像的35質量1個
- CCITT圖像的壓縮圖像1
- 圖像的CCITT壓縮圖像2
我能夠生成單獨的TIFF文件爲上述3類型。但是,當我嘗試將它們合併時,我必須給予單個壓縮
param(`params.setCompression(TIFFEncodeParam.COMPRESSION_PACKBITS);`)
它擴大了尺寸。
如何爲不同的頁面設置不同的壓縮率?
我想將2個jpeg圖像編碼爲3頁的TIFF文件。規格如下。用不同的壓縮方式創建多頁TIFF
我能夠生成單獨的TIFF文件爲上述3類型。但是,當我嘗試將它們合併時,我必須給予單個壓縮
param(`params.setCompression(TIFFEncodeParam.COMPRESSION_PACKBITS);`)
它擴大了尺寸。
如何爲不同的頁面設置不同的壓縮率?
用JAI嘗試之後。我切換到icafe
BufferedImage[] images = new BufferedImage[3];
images[0]=compressedFront;
images[1]=frontBinaryImage;
images[2]=backBinaryImage;
ImageParam.ImageParamBuilder builder = ImageParam.getBuilder();
TIFFOptions tiffOptions = new TIFFOptions();
tiffOptions.setTiffCompression(Compression.JPG);
tiffOptions.setJPEGQuality(35);
ImageParam[] param = new ImageParam[3];
param[0] = builder.colorType(ImageColorType.GRAY_SCALE).imageOptions(tiffOptions).build();
tiffOptions = new TIFFOptions(tiffOptions); // Copy constructor
tiffOptions.setTiffCompression(Compression.CCITTFAX4);
param[1] = builder.colorType(ImageColorType.BILEVEL).imageOptions(tiffOptions).build();
tiffOptions = new TIFFOptions(tiffOptions);
tiffOptions.setTiffCompression(Compression.CCITTFAX4);
param[2] = builder.colorType(ImageColorType.BILEVEL).imageOptions(tiffOptions).build();
TIFFTweaker.writeMultipageTIFF(rout, param, images);
rout.close();
fout.close();
使用標準的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
,但它應該與JAI ImageIO插件一樣工作。
請問您能再展示一些代碼嗎?如果您正在使用JAI的ImageIO部分,則應該能夠將多個頁面作爲序列寫入,並將單獨的參數/壓縮傳遞給每個'writeToSequence(img,param)'調用。 – haraldK
是的,我正在使用JAI。但是現在我更容易更改爲[icafe](https://github.com/dragon66/icafe/)。 – Shenal
謝謝你的建議。將嘗試 – Shenal