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

本文介绍如何使用Java生成分辨率300dpi以上的TIFF图像,满足学术出版需求。通过利用JAI的jai-imageio工具及特定参数设置,确保图像在不同软件中均能正确显示高分辨率。

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

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

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

先从https://jai-imageio.dev.java.net/binary-builds.html下载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 */ public class 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) new long[][]{{(long) dpi, 1}, {0, 0}}); extras[1] = new TIFFField(283, TIFFTag.TIFF_RATIONAL, 1, (Object) new long[][]{{(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(); } } }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值