Java - Ghép nhiều hình tif một trang thành một hình tif nhiều trang.(Merge many single-page TIF into one multi-page TIF)




Như trong bài viết trước tôi có giới thiệu cách chuyển đổi hình TIF nhiều trang thành nhiều hình TIF một trang. Bài viết hôm nay tôi xin giới thiệu cách để gộp nhiều hình TIF một trang thành một hình TIF nhiều trang.

Cũng như bài trước chúng ta sẽ sử dựng gói(package) JAI để thực hiện thao tác ghép nhiều hình thành TIF một trang thành một hình TIF nhiều trang.






Đầu tiên bạn download các hình ảnh và thư viện JAI cần thiết.

jai-core-1.1.3-alpha.jar
jai_codec-1.1.3-alpha.jar
VNLIVES.NET - girls generation 01.tif
VNLIVES.NET - girls generation 02.tif

Dưới đây là toàn bộ source để thực thi công việc.
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.awt.image.BufferedImage;

import javax.media.jai.NullOpImage;
import javax.media.jai.OpImage;
import javax.media.jai.PlanarImage;

import com.sun.media.jai.codec.ImageEncoder;
import com.sun.media.jai.codec.SeekableStream;
import com.sun.media.jai.codec.FileSeekableStream;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.TIFFEncodeParam;

public class merge_many_single_page_tif_into_one_multi_page_tif {

  public static void main(String[] args) throws Exception {

    // 2 single page TIF to be in a multipage
    String [] tifs = {
        "D:/Tutorials/Java_Tutorial/JAVA_Data/VNLIVES.NET - girls generation 01.tif",
        "D:/Tutorials/Java_Tutorial/JAVA_Data/VNLIVES.NET - girls generation 02.tif"
    };
    int numTifs = tifs.length;  // 2 pages

    BufferedImage image[] = new BufferedImage[numTifs];
    for (int i = 0; i < numTifs; i++) {
        SeekableStream ss = new FileSeekableStream(tifs[i]);
        ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", ss, null);
        PlanarImage pi = new NullOpImage
            (decoder.decodeAsRenderedImage(0),null,null,OpImage.OP_IO_BOUND);
        image[i] = pi.getAsBufferedImage();
        ss.close();
    }

    TIFFEncodeParam params = new TIFFEncodeParam();
    params.setCompression(TIFFEncodeParam.COMPRESSION_DEFLATE);
    OutputStream out = new FileOutputStream("D:/multipage.tif");
    ImageEncoder encoder = ImageCodec.createImageEncoder("tiff", out, params);
    List <BufferedImage>list = new ArrayList<BufferedImage>(image.length);
    for (int i = 1; i < image.length; i++) {
        list.add(image[i]);
    }
    params.setExtraImages(list.iterator());
    encoder.encode(image[0]);
    out.close();

    System.out.println("Done.");
  }
}

String [] tifs = {
  • Gán đường dẫn các hình TIF một trang vào mảng Tifs.
BufferedImage image[] = new BufferedImage[numTifs];
  • Tạo mảng BuffereImage và số lượng hình TIF một trang vào mảng(nuTifs).
OutputStream out = new FileOutputStream("D:/multipage.tif");
  • Thiết lập đường dẫn và tên hình TIF nhiều trang được gom từ nhiều hình TIF một trang.









No comments:

Post a Comment