用 JAI 写一个 .TIFF

Write a .TIFF with JAI

我是 Java 的初学者,也是一名测绘学生。 我正在使用 IntelliJ。 我想从 BufferedImage 创建一个 TIFF。 这是我的代码:

    byte[] buffer = new byte[width * height];
    ColorSpace cs = ColorSpace.getInstance( ColorSpace.CS_GRAY );
    int[] nBits = { 8 };
    ColorModel cm = new ComponentColorModel( cs, nBits, false, true,Transparency.OPAQUE, DataBuffer.TYPE_BYTE );
    SampleModel sm = cm.createCompatibleSampleModel( width, height );
    DataBufferByte db = new DataBufferByte( buffer, width * height );
    WritableRaster raster = Raster.createWritableRaster( sm, db, null);
    BufferedImage result = new BufferedImage( cm, raster, false , null );
    File outputfile = new File( "saved.png" );
    ImageIO.write( result, "png", outputfile );

光栅 .png 已创建并且运行良好。但我想创建一个 .TIFF 并且 ImageIO.write 不创建 TIFF(仅 png、bmp 和 jpeg)。所以我在这里下载了 JAI(Java 高级成像):http://download.java.net/media/jai/builds/release/1_1_3/ 我将它上传到我的项目和 Maven 上,但我不知道如何简单地进行争吵...我尝试了一些我在互联网上找到的片段,但它不起作用..

        TIFFEncodeParam params = new TIFFEncodeParam();
        FileOutputStream os = new FileOutputStream("PingsTiff.tiff");
        javax.media.jai.JAI.create("encode", result, os, "TIFF", params);

无法识别 "TIFFEncodeParam" 和 "media"...而且我是个真正的编程小白..

谢谢

首先,JAI自带一套ImageIO插件,可以让你使用ImageIO.write写TIFF格式。但它要求 jai_imageio.jar 在 class 路径上。我想这就是您缺少的 JAR。

此外,如果您正确设置了导入和依赖项,您发布的代码应该可以工作。这有点棘手,因为 JAI 的某些部分需要使用安装程序安装的本机库,并在正确的 JRE 等中。因此,它不是与 Maven 的完美契合(尽管肯定可行)。

但是,正如您从问题中的下载 link 中看到的那样,JAI 是一个几乎已死的项目(最新更新是从 2006 年开始的)。

由于缺乏更新、错误修复和支持,以及本地部分和许可证问题,我建立了一个开源项目,旨在提供至少与 JAI 一样好的文件格式支持,没有本机要求并在 BSD 许可下发布。

您可以在项目主页上阅读它,特别是 TIFF plugin。页面再往下一点是下载 links,Maven 依赖信息等

当您声明了对 TIFF 插件的依赖后,您应该可以像这样使用普通 ImageIO 编写您的 TIFF:

File outputfile = new File("saved.tif");

if (!ImageIO.write(result, "TIFF", outputfile)) {
    // Beware, write is a boolean method, that returns success!
    System.err.println("Could not write " + outputfile.getAbsolutePath() + " in TIFF format.");
}