Java 将GeoTIFF元数据从一个文件写入另一个文件
我的任务是获取一个GeoTIFF,在中进行一些图像分割,并将其保存到新的GeoTIFF(使用现有坐标)。如果我理解正确,坐标将保留在GeoTIFF元数据中。 因此,我从原始文件中获取元数据:Java 将GeoTIFF元数据从一个文件写入另一个文件,java,geotiff,boofcv,Java,Geotiff,Boofcv,我的任务是获取一个GeoTIFF,在中进行一些图像分割,并将其保存到新的GeoTIFF(使用现有坐标)。如果我理解正确,坐标将保留在GeoTIFF元数据中。 因此,我从原始文件中获取元数据: File file = new File(inputFilePath); ImageInputStream iis = ImageIO.createImageInputStream(file); Iterator<ImageReader> readers = ImageIO.getImageRe
File file = new File(inputFilePath);
ImageInputStream iis = ImageIO.createImageInputStream(file);
Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);
IIOMetadata metadata=null;
ImageReader reader=null;
if (readers.hasNext()) {
// pick the first available ImageReader
reader = readers.next();
// attach source to the reader
reader.setInput(iis, true);
// read metadata of first image
metadata = reader.getImageMetadata(0);
}
结果我获得了一个BuffereImage(resultBufferedImage),成功地进行了图像分割。
下面是我的问题,我正在尝试用旧元数据保存此BuffereImage:
BufferedOutputStream out;
ImageWriter writer = ImageIO.getImageWriter(reader);
ImageOutputStream imgout = null;
FileOutputStream fos =null;
fos = new FileOutputStream(outputImage);
out = new BufferedOutputStream(fos);
imgout = ImageIO.createImageOutputStream(out);
writer.setOutput(imgout);
ImageWriteParam param = writer.getDefaultWriteParam();
IIOImage destIIOImage = new IIOImage(resultBufferedImage, null, metadata);
System.out.println("Before write");
writer.write(null, destIIOImage, null);
System.out.println("After write");
“写完后”我会被打印出来。但程序仍在运行,我试图等待,但没有结果。因此,当我终止进程时,即使使用地理数据,文件也会成功创建。如何确定写入和停止程序的完成?
p、 默认Ubuntu viewer中的美国图像看起来不错,但当我在QGIS中打开它时,我有透明字段,如何使灰色背景透明?不是真正的答案,但这里有两个关于如何使TIFF透明的答案:
BufferedOutputStream out;
ImageWriter writer = ImageIO.getImageWriter(reader);
ImageOutputStream imgout = null;
FileOutputStream fos =null;
fos = new FileOutputStream(outputImage);
out = new BufferedOutputStream(fos);
imgout = ImageIO.createImageOutputStream(out);
writer.setOutput(imgout);
ImageWriteParam param = writer.getDefaultWriteParam();
IIOImage destIIOImage = new IIOImage(resultBufferedImage, null, metadata);
System.out.println("Before write");
writer.write(null, destIIOImage, null);
System.out.println("After write");