用JAI写一个.TIFF

时间:2015-05-19 08:29:03

标签: java maven tiff 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上,但我不知道如何简单地制作一个tiff ...我尝试了一些我在互联网上发现的片段,但它不起作用..

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

" TIFFEncodeParam"和"媒体"我不被认可......而且我在编程方面是一个真正的菜鸟。

由于

1 个答案:

答案 0 :(得分:0)

首先,JAI附带了一组ImageIO插件,允许您使用ImageIO.write以TIFF格式编写。但它需要jai_imageio.jar在类路径上。我想这是你想念的JAR。

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

但是,正如您在问题中的下载链接中看到的那样,JAI是一个非常死的项目(最新更新是从2006年开始)。

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

您可以在项目主页上阅读相关信息,特别是TIFF plugin。在页面下方稍微下来的是下载链接,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.");
}