多页tif到多个jpeg文件(java)

多页tif到多个jpeg文件(java),java,jpeg,tiff,jai,Java,Jpeg,Tiff,Jai,您好,我可以用下面的代码将tif文件转换成jpeg格式 这只适用于一页tif文件,当我将其用于多页tif时,它只保存第一页 如何修改此选项以将mymultipagetif.tif保存到: mymultipagetif-0.jpeg mymultipagetif-1.jpeg mymultipagetif-2.jpeg 谢谢 这将获取一个多页TIFF文件(在SeekableStream中),提取页面数组中的页面(例如“1”、“3”、“4”),并将它们写入一个多页TIFF文件中。根据需要修改

您好,我可以用下面的代码将tif文件转换成jpeg格式

这只适用于一页tif文件,当我将其用于多页tif时,它只保存第一页

如何修改此选项以将mymultipagetif.tif保存到:

  • mymultipagetif-0.jpeg
  • mymultipagetif-1.jpeg
  • mymultipagetif-2.jpeg

谢谢

这将获取一个多页TIFF文件(在SeekableStream中),提取页面数组中的页面(例如“1”、“3”、“4”),并将它们写入一个多页TIFF文件中。根据需要修改

private String _ExtractListOfPages (SeekableStream ss, String outTiffFileName, String[] pages){
    // pageNums is a String array of 0-based page numbers.
    try {
        TIFFDirectory td = new TIFFDirectory(ss, 0);
        if (debugOn) {
            System.out.println("Directory has " + Integer.toString(td.getNumEntries()) +  " entries");
            System.out.println("Getting TIFFFields");
            System.out.println("X resolution = " +  Float.toString(td.getFieldAsFloat(TIFFImageDecoder.TIFF_X_RESOLUTION)));
            System.out.println("Y resolution = " +  Float.toString(td.getFieldAsFloat(TIFFImageDecoder.TIFF_Y_RESOLUTION)));
            System.out.println("Resolution unit = " +  Long.toString(td.getFieldAsLong(TIFFImageDecoder.TIFF_RESOLUTION_UNIT)));
            }
        ImageDecoder decodedImage = ImageCodec.createImageDecoder("tiff", ss, null);
        int count = decodedImage.getNumPages();
        if (debugOn) { System.out.println("Input image has " + count + " page(s)"); }
        TIFFEncodeParam param = new TIFFEncodeParam();
        TIFFField tf = td.getField(259); // Compression as specified in the input file
        param.setCompression(tf.getAsInt(0)); // Set the compression of the output to be the same.
        param.setLittleEndian(false); // Intel
        param.setExtraFields(td.getFields());
        FileOutputStream fOut = new FileOutputStream(outTiffFileName);
        Vector<RenderedImage> vector = new Vector<RenderedImage>();
        RenderedImage page0 = decodedImage.decodeAsRenderedImage(Integer.parseInt(pages[0]));
        BufferedImage img0 = new BufferedImage(page0.getColorModel(), (WritableRaster)page0.getData(), false, null);
        int pgNum;
// Adding the extra pages starts with the second one on the list.
        for (int i = 1; i < pages.length; i++ ) {
            pgNum = Integer.parseInt(pages[i]);
            if (debugOn) { System.out.println ("Page number " + pgNum); }
            RenderedImage page = decodedImage.decodeAsRenderedImage(pgNum);
            if (debugOn) { System.out.println ("Page is " + Integer.toString(page.getWidth()) + " pixels wide and "+ Integer.toString(page.getHeight()) + " pixels high."); }
            if (debugOn) { System.out.println("Adding page " + pages[i] + " to vector"); }
            vector.add(page);
        }
        param.setExtraImages(vector.iterator());
        ImageEncoder encoder = ImageCodec.createImageEncoder("tiff", fOut, param);
        if (debugOn) { System.out.println("Encoding page " + pages[0]); }
        encoder.encode(decodedImage.decodeAsRenderedImage(Integer.parseInt(pages[0])));
        fOut.close();
    } catch (Exception e) {
        System.out.println(e.toString());
        return("Not OK " + e.getMessage());
    }
    return ("OK");
}
private String\u ExtractListOfPages(请参阅KableStream ss、String outTiffFileName、String[]页){
//pageNums是基于0的页码的字符串数组。
试一试{
TIFFDirectory td=新的TIFFDirectory(ss,0);
if(debugOn){
System.out.println(“目录有”+Integer.toString(td.getNumEntries())+“条目”);
System.out.println(“获取Tiffields”);
System.out.println(“X分辨率=“+Float.toString(td.getFieldAsFloat(TIFFImageDecoder.TIFF_X_分辨率)));
System.out.println(“Y分辨率=“+Float.toString(td.getFieldAsFloat(TIFFImageDecoder.TIFF_Y_分辨率)));
System.out.println(“分辨率单位=“+Long.toString(td.getFieldAsLong(TIFFImageDecoder.TIFF_分辨率单位)));
}
ImageDecoder decodedImage=ImageCodec.createImageDecoder(“tiff”,ss,null);
int count=decodedImage.getNumPages();
if(debugOn){System.out.println(“输入图像有“+count+”页)”;}
TIFFEncodeParam param=新的TIFFEncodeParam();
tiffield tf=td.getField(259);//输入文件中指定的压缩
param.setCompression(tf.getAsInt(0));//将输出的压缩设置为相同。
参数setLittleEndian(false);//英特尔
参数setExtraFields(td.getFields());
FileOutputStream fOut=新的FileOutputStream(outTiffFileName);
向量=新向量();
RenderImagePage0=decodedImage.DecodeAsRenderImageInteger.parseInt(第[0]页));
BuffereImage img0=新的BuffereImage(page0.getColorModel(),(WritableRaster)page0.getData(),false,null);
int-pgNum;
//添加额外页面从列表中的第二个页面开始。
对于(int i=1;i
您是否意识到,您的代码是从链接的问题中获得的,而不是从其回答中获得的?所讨论的代码很可笑,它从一个文件读取,然后写回另一个文件,而不进行任何转换,只实现了更改文件扩展名。。。显然,你不必从网络上的陌生人那里学习,但是阅读代码而不是复制/粘贴代码将是更精通开发的良好的第一步。
private String _ExtractListOfPages (SeekableStream ss, String outTiffFileName, String[] pages){
    // pageNums is a String array of 0-based page numbers.
    try {
        TIFFDirectory td = new TIFFDirectory(ss, 0);
        if (debugOn) {
            System.out.println("Directory has " + Integer.toString(td.getNumEntries()) +  " entries");
            System.out.println("Getting TIFFFields");
            System.out.println("X resolution = " +  Float.toString(td.getFieldAsFloat(TIFFImageDecoder.TIFF_X_RESOLUTION)));
            System.out.println("Y resolution = " +  Float.toString(td.getFieldAsFloat(TIFFImageDecoder.TIFF_Y_RESOLUTION)));
            System.out.println("Resolution unit = " +  Long.toString(td.getFieldAsLong(TIFFImageDecoder.TIFF_RESOLUTION_UNIT)));
            }
        ImageDecoder decodedImage = ImageCodec.createImageDecoder("tiff", ss, null);
        int count = decodedImage.getNumPages();
        if (debugOn) { System.out.println("Input image has " + count + " page(s)"); }
        TIFFEncodeParam param = new TIFFEncodeParam();
        TIFFField tf = td.getField(259); // Compression as specified in the input file
        param.setCompression(tf.getAsInt(0)); // Set the compression of the output to be the same.
        param.setLittleEndian(false); // Intel
        param.setExtraFields(td.getFields());
        FileOutputStream fOut = new FileOutputStream(outTiffFileName);
        Vector<RenderedImage> vector = new Vector<RenderedImage>();
        RenderedImage page0 = decodedImage.decodeAsRenderedImage(Integer.parseInt(pages[0]));
        BufferedImage img0 = new BufferedImage(page0.getColorModel(), (WritableRaster)page0.getData(), false, null);
        int pgNum;
// Adding the extra pages starts with the second one on the list.
        for (int i = 1; i < pages.length; i++ ) {
            pgNum = Integer.parseInt(pages[i]);
            if (debugOn) { System.out.println ("Page number " + pgNum); }
            RenderedImage page = decodedImage.decodeAsRenderedImage(pgNum);
            if (debugOn) { System.out.println ("Page is " + Integer.toString(page.getWidth()) + " pixels wide and "+ Integer.toString(page.getHeight()) + " pixels high."); }
            if (debugOn) { System.out.println("Adding page " + pages[i] + " to vector"); }
            vector.add(page);
        }
        param.setExtraImages(vector.iterator());
        ImageEncoder encoder = ImageCodec.createImageEncoder("tiff", fOut, param);
        if (debugOn) { System.out.println("Encoding page " + pages[0]); }
        encoder.encode(decodedImage.decodeAsRenderedImage(Integer.parseInt(pages[0])));
        fOut.close();
    } catch (Exception e) {
        System.out.println(e.toString());
        return("Not OK " + e.getMessage());
    }
    return ("OK");
}