用Java输出分辨率300dpi以上的TIFF图像

http://blog.csdn.net/casularm/article/details/4054484

国外期刊发表文章需要提供分辨率在300~600dpi的图像,而使用javax.imageio.ImageIO只能够输出72dpi的JPG、PNG或GIF图像,无法满足要求。

Java Advanced Imaging(JAI)的jai-imageio工具提供了输出高分辨率TIFF图像解决方法。网上有一篇相关的文章《使用 Java 进行图像处理 - 编码输出高分辨率图像》 ,但是笔者使用其中代码生成的图像在Windows下右键查看属性确实显示为300dpi,但是使用Photoshop或者Fireworks等图像处理工具时却仍然显示为72dpi。本人经过一番摸索,终于解决了这个问题,现总结余下:

先从点击打开链接下载jai-imageio.jar,另外编译还需要JAIl的jai_codec.jar和jai_core.jar

 

[java]  view plain copy
  1. import com.sun.media.imageio.plugins.tiff.TIFFTag;  
  2. import com.sun.media.jai.codec.TIFFEncodeParam;  
  3. import com.sun.media.jai.codec.TIFFField;  
  4. import com.sun.media.jai.codecimpl.TIFFImageEncoder;  
  5. import java.awt.image.RenderedImage;  
  6. import java.io.File;  
  7. import java.io.FileOutputStream;  
  8. import java.io.IOException;  
  9. /** 
  10.  * <p>TIFFOutput.java</p> 
  11.  * <p>Created on Apr 6, 2009, 10:46:41 PM</p> 
  12.  * <p>Copyright (c) 2007-2009. CUCKOO Workgroup, USTC, P.R.China</p> 
  13.  * @author Ren Jian 
  14.  */  
  15. public class TiffOutput {  
  16.     public TiffOutput(RenderedImage image, String outputFilePath, int dpi) {  
  17.         try {  
  18.             if (image != null) {  
  19.                 TIFFEncodeParam param = new TIFFEncodeParam();  
  20.                 param.setCompression(TIFFEncodeParam.COMPRESSION_NONE);  
  21.                 TIFFField[] extras = new TIFFField[2];  
  22.                 extras[0] = new TIFFField(282, TIFFTag.TIFF_RATIONAL, 1, (Object) new long[][]{{(long) dpi, 1}, {00}});  
  23.                 extras[1] = new TIFFField(283, TIFFTag.TIFF_RATIONAL, 1, (Object) new long[][]{{(long) dpi, 1}, {00}});  
  24.                 param.setExtraFields(extras);  
  25.                 File outputFile = new File(outputFilePath);  
  26.                 outputFile.createNewFile();  
  27.                 FileOutputStream outputStream = new FileOutputStream(outputFile);  
  28.                 TIFFImageEncoder encoder = new TIFFImageEncoder(outputStream, param);  
  29.                 encoder.encode(image);  
  30.                 outputStream.close();  
  31.             }  
  32.         } catch (IOException ex) {  
  33.             ex.printStackTrace();  
  34.         }  
  35.     }  
  36. }  


你可能感兴趣的:(java)