用Java輸出解析度300dpi以上的TIFF影象
阿新 • • 發佈:2019-02-06
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
- import com.sun.media.imageio.plugins.tiff.TIFFTag;
- import com.sun.media.jai.codec.TIFFEncodeParam;
- import com.sun.media.jai.codec.TIFFField;
- import com.sun.media.jai.codecimpl.TIFFImageEncoder;
-
import java.awt.image.RenderedImage;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- /**
- * <p>TIFFOutput.java</p>
- * <p>Created on Apr 6, 2009, 10:46:41 PM</p>
- * <p>Copyright (c) 2007-2009. CUCKOO Workgroup, USTC, P.R.China</p>
- * @author Ren Jian
- */
-
publicclass TiffOutput {
- public TiffOutput(RenderedImage image, String outputFilePath, int dpi) {
- try {
- if (image != null) {
- TIFFEncodeParam param = new TIFFEncodeParam();
- param.setCompression(TIFFEncodeParam.COMPRESSION_NONE);
- TIFFField[] extras = new TIFFField[2];
- extras[0] = new TIFFField(282, TIFFTag.TIFF_RATIONAL, 1, (Object) newlong[][]{{(long) dpi, 1}, {0, 0}});
- extras[1] = new TIFFField(283, TIFFTag.TIFF_RATIONAL, 1, (Object) newlong[][]{{(long) dpi, 1}, {0, 0}});
- param.setExtraFields(extras);
- File outputFile = new File(outputFilePath);
- outputFile.createNewFile();
- FileOutputStream outputStream = new FileOutputStream(outputFile);
- TIFFImageEncoder encoder = new TIFFImageEncoder(outputStream, param);
- encoder.encode(image);
- outputStream.close();
- }
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- }