Gle*_*Gle 22 java tiff javax.imageio
我不知道如何处理TIFF图像,但我无法使用直接Java标准ImageIO库来读取或写入任何图像.有什么想法吗?
谢谢.
har*_*ldK 13
如果您因为任何原因不喜欢或不能使用JAI,我已经为ImageIO编写了一个TIFF ImageReader插件,可以在GitHub上找到.它是纯Java,不需要任何本机安装,并且带有非常友好的开源许可证(BSD).
它支持任何基线TIFF选项,以及许多标准扩展.从版本3.1开始,TIFF插件也具有写入支持.
使用类路径中的正确JAR,用法可以简单到:
BufferedImage image = ImageIO.read(inputTIFF);
// ...modify image (compose, resize, sharpen, etc)...
ImageIO.write(image, "TIFF", outputTIFF);
Run Code Online (Sandbox Code Playgroud)
小智 5
我尝试过 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据JEP 262:TIFF Image I / O,从Java 9开始,以前是JAI一部分的TIFF插件将作为Java SE的一部分提供。
这意味着,使用Java 9或更高版本,以下代码将可以正常工作,而无需任何额外的导入或依赖:
BufferedImage image = ImageIO.read(inputTIFF);
// ...modify image (compose, resize, sharpen, etc)...
ImageIO.write(image, "TIFF", outputTIFF);
Run Code Online (Sandbox Code Playgroud)
我尚未能够在此插件中验证对非基准TIFF风格的支持,但我认为至少应完全支持基准TIFF。