繁体   English   中英

如何将多个png图像转换为单个tiff文件

[英]How do I convert multiple png images to a single tiff file

我有一个png格式的几个图像的字节数组。 我必须将其转换为tiff文件,然后转换为相应的字节数组。 这个tiff文件将保存多个图像。

我已经接受了很多,但我还没有成功。 问题是。 我只能在java中这样做!! :)任何人都可以就我的问题提供一些见解吗?

我不会受益于ImageMagick等,因为我有一个处理此转换的服务器组件,然后将其作为tiff保存在后端。 客户端给我一个字节数组,它将转换为png图像。

以下是解决方案。

import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.IIOImage;
import javax.imageio.ImageWriteParam;
import javax.imageio.stream.ImageOutputStream;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Iterator;

/**
 * 
 * 
 * This class is used to convert the multiple images in to single multi-pages tiff image file.
 *
 */
public class MultiPageTiffGenerator {

 private static String compressionType="JPEG";

 public static boolean generateMultiPageTiff(String dirName,String outputFileName) throws Exception{
  boolean generated=false;
  ImageOutputStream ios=null;
  ImageWriter writer=null;
  try {
   // verify the directory for the image files
   File dir = new File(dirName);
   if(null!=dir && !dir.isDirectory()){
    throw new FileNotFoundException("No directory exists with the given name"+dirName);
   }
   // verify the images files exist

   File[] files = dir.listFiles();
   if(null == files || files.length == 0){
    throw new FileNotFoundException("No image files to process");

   }else{
    // Create the output file on the disk
    File file = new File(dirName+outputFileName+".tif");
    ios = ImageIO.createImageOutputStream(file);

    // Get the appropriate Tiff Image Writer
    Iterator <ImageWriter> writers=ImageIO.getImageWritersByFormatName("tiff");
    if(null== writers || ! writers.hasNext()){
     throw new Exception("Appropriate Tiff writer not found");
    }

    writer = ImageIO.getImageWritersByFormatName("tiff").next();
    writer.setOutput(ios);
    // Set the compression parameters for Tiff image
    ImageWriteParam param = writer.getDefaultWriteParam();
    //param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
    //param.setCompressionType(compressionType); 
    //param.setCompressionQuality(0.9F);

    // Loop through all image files and write them to output tiff image
    for (int i = 0; i < files.length; i++) {
     InputStream fis=null;
     int dotIndex= files[i].getName().lastIndexOf('.');
     dotIndex=dotIndex>0?dotIndex:files[i].getName().length();
     String fileName = files[i].getName().substring(0,dotIndex);
     if(!fileName.equalsIgnoreCase(outputFileName)){
      try{

       fis = new BufferedInputStream(new FileInputStream(files[i]));
       BufferedImage image = ImageIO.read(fis);
       IIOImage img = new IIOImage(image, null, null);
       if (i == 0) {
        writer.write(null, img, param);
       }
       else {
        writer.writeInsert(-1, img, param);
       }
       image.flush();
      }finally{
       if(null!=fis){
        fis.close();
       }
      }
     }

    }
    ios.flush();
    generated=true;

   }

  }catch(FileNotFoundException ex){
   generated=false;
  }catch(IOException ex){
   generated=false;
  }catch(Exception ex){
   generated=false;
  }finally{
   if(null!=ios)
    ios.close();
   if(null!=writer)
    writer.dispose();
  }
  return generated;
 }

}

JMagick库是ImageMagickJava接口 ,可能就是您想要的。

您是否正在尝试以编程方式执行此操作? 你可能想看看ImageMagick( http://www.imagemagick.org/script/index.php

如果你正在编写某种shell脚本(bash,batch),你可以调用convert命令(它是该包的一部分。)否则,ImageMagick的所有功能都可以通过库(C,perl等)获得。你可以尝试链接你的程序。

我使用ghostscript创建了多页PDF文件,你可以做类似的事情。 我的特定应用程序有许多JPG文件,我传递给命令行调用windows上的ghostscript来创建一个多页PDF。

如果我这样做,我会先将png文件写入磁盘。 接下来使用ghostscript创建一个多页ps文件,将所有PNG文件作为输入,并输出到sinlge PostScript文档。 最后,使用ps2tif之类的东西进行最终转换。 您可以通过以编程方式编写批处理脚本或让应用程序直接调用命令行应用程序来自动执行该过程。

这在Unix / Linux环境中可能是最容易做到的,但是在Win32上使用相同的工具是可行的。

您应该使用JAI(Java Imaging API)。 它能够读/写PNG并且至少能够读取TIFF(也应该支持写入)。

http://java.sun.com/products/java-media/jai/iio.html

如果不支持写作,请使用Lizard的Tiff Library for Java( http://www.lizardworks.com/libs.html

在此主题中,您可以找到如何将多个文件合并为一个TIFF。 海报有问题更改TIFF元数据但这不应该影响您的问题。 http://forums.java.net/jive/thread.jspa?messageID=244190&tstart=0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM