使用Java ImageIO标准库无法读取和写入TIFF图像文件
我不知道如何处理TIFF图像,但是我无法使用直接的Java标准ImageIO库读取或写入它们中的任何一个。有什么想法吗?使用Java ImageIO标准库无法读取和写入TIFF图像文件
谢谢。
我试过JAI,它不适合我。
你卡在哪里?以下是否适合你?
import java.io.File;
import java.io.FileOutputStream;
import java.awt.image.RenderedImage;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import javax.media.jai.NullOpImage;
import javax.media.jai.OpImage;
import com.sun.media.jai.codec.SeekableStream;
import com.sun.media.jai.codec.FileSeekableStream;
import com.sun.media.jai.codec.TIFFDecodeParam;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.ImageCodec;
public class Main {
public static void main(String args[]) {
File file = new File("input.tif");
try {
SeekableStream s = new FileSeekableStream(file);
TIFFDecodeParam param = null;
ImageDecoder dec = ImageCodec.createImageDecoder("tiff", s, param);
RenderedImage op = new NullOpImage(dec.decodeAsRenderedImage(0),
null,
OpImage.OP_IO_BOUND,
null);
FileOutputStream fos = new FileOutputStream("output.jpg");
JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(fos);
jpeg.encode(op.getData());
fos.close();
}
catch (java.io.IOException ioe) {
System.out.println(ioe);
}
}
}
一旦你在classpath中有jai_imageio.jar,你应该简单的正常使用ImageIO API – MadProgrammer 2012-07-18 00:08:50
添加Maven的依赖性:
<dependency>
<groupId>org.geotoolkit</groupId>
<artifactId>geotk-coverageio</artifactId>
<version>3.17</version>
</dependency>
代码示例:
import org.geotoolkit.image.io.plugin.RawTiffImageReader;
IIORegistry registry = IIORegistry.getDefaultInstance();
registry.registerServiceProvider(new RawTiffImageReader.Spi());
String[] a = ImageIO.getReaderFileSuffixes();
for (int i=0; i<a.length; i++) {
System.out.println(a[i]);
}
BufferedImage image = ImageIO.read(new File("C:\\mypic.tiff"));
ImageIO.write(image, "jpg",new File("C:\\out.jpg"));
ImageIO.write(image, "gif",new File("C:\\out.gif"));
ImageIO.write(image, "png",new File("C:\\out.png"));
ImageIO.write(image, "tif",new File("C:\\out.tiff"));
恐怕依赖不再起作用。什么工作对我来说:
如果你不喜欢或者不能使用JAI为我写了一个TIFF插件的ImageReader任何理由ImageIO,请登录GitHub。它是纯Java的,不需要任何本机安装,并且带有非常友好的开源许可证(BSD)。
它支持任何基线TIFF选项以及大量的标准扩展。从版本3.1起,TIFF插件也具有写入支持。
在你的类路径正确的JAR文件,使用可以简单到:
BufferedImage image = ImageIO.read(inputTIFF);
// ...modify image (compose, resize, sharpen, etc)...
ImageIO.write(image, "TIFF", outputTIFF);
你好haraldK你怎么用这个?我根本不喜欢JAI,我找不到任何关于如何将tiff文件转换为jpg的例子。我试过了:BufferedImage image = ImageIO.read(new File(inFile)); !ImageIO。写(图像,“jpg”,新的文件(outFile))) – delkant 2014-04-07 23:20:02
@delkant这可能应该工作,如果你有一切正确安装。请参阅[安装说明](https://github.com/haraldk/TwelveMonkeys#installing)以获取更多详细信息,或者如果无法使用它,请提交问题(包含完整详细信息)。 – haraldK 2014-04-08 10:16:23
根据JEP 262: TIFF Image I/O的TIFF插件,曾经是JAI的一部分将可作为Java SE的一部分,从Java 9.
这意味着,使用Java 9日起,下列代码将只是工作,没有任何额外的进口或依赖性:
BufferedImage image = ImageIO.read(inputTIFF);
// ...modify image (compose, resize, sharpen, etc)...
ImageIO.write(image, "TIFF", outputTIFF);
我还没有能够验证此插件中对非基线TIFF风格的支持,但我认为至少应该完全支持基线TIFF。
您使用Java SE吗? [Java Advanced Imaging API](http://java.sun.com/products/java-media/jai/iio.html)支持TIFF。详情[这里](https://jai-imageio.dev.java.net/)。 – MPG 2009-12-23 19:14:29
您需要[JAI包](https://jai.dev.java.net/#Downloads)来处理TIFF文件。一个显示TIFF文件的简单例子:[显示一个TIF](http://www.rgagnon.com/javadetails/java-0605.html) – RealHowTo 2009-12-23 21:26:37