0
点赞
收藏
分享

微信扫一扫

提取TIFF文件的指定页码,然后合成新的TIFF

/**
     * 提取TIFF文件的指定页码,然后合成新的TIFF
     *
     * @param source 源文件(.tiff)
     * @param target 目标文件(.tiff)
     * @param pages  要提取的页码集合
     */
    public static void extractAndCreateTiff(File source, File target, List<String> pages) throws Exception {
        try (ImageInputStream input = new FileImageInputStream(source);
             ImageOutputStream output = new FileImageOutputStream(target)) {

            ImageReader reader = ImageIO.getImageReadersByFormatName(FileUtils.getSuffixName(source.getName())).next();
            reader.setInput(input);
            // tiff文件总页码
            int totalPages = reader.getNumImages(true);

            // 校验页码有效性
            for (String pageStr : pages) {
                int page = Integer.parseInt(pageStr);
                if (page < 1 || page > totalPages) {
                    throw new IllegalArgumentException("页码范围需在 1 至 " + totalPages + " 之间");
                }
            }

            ImageWriter writer = ImageIO.getImageWritersByFormatName(FileUtils.getSuffixName(source.getName())).next();
            ImageWriteParam params = writer.getDefaultWriteParam();
            params.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
            params.setCompressionType("Deflate");
            writer.setOutput(output);
            writer.prepareWriteSequence(null);

            // 循环提取添加新文件
            for (String pageStr : pages) {
                int page = Integer.parseInt(pageStr);
                // 页码默认从0开始,此处默认-1
                BufferedImage image = reader.read(page - 1);
                // 提取操作可能携带原始文件的EXIF、地理坐标等元数据到新文件38
                // 需清除冗余元数据:
                IIOMetadata metadata = writer.getDefaultImageMetadata(
                        new ImageTypeSpecifier(image), params);
                writer.writeToSequence(new IIOImage(image, null, metadata), params);
            }
            writer.endWriteSequence();
        } catch (IOException e) {
            log.error("TIFF文件处理异常", e);
            throw e;
        }
    }

举报

相关推荐

0 条评论