私の仕事は、tiff 画像を 90° 回転させることです。JAI を介してこれを行う方法の例をいくつか見つけました。だから私は見つけた例からコードを書きました:
BufferedImage im = ImageIO.read(new FileInputStream(rasterFilePath));
PlanarImage pi = PlanarImage.wrapRenderedImage(im);
BufferedImage bi = pi.getAsBufferedImage();
AffineTransform at = new AffineTransform();
at.translate(-(im.getWidth() - im.getHeight()) / 2, (im.getWidth() - im.getHeight()) / 2);
at.rotate(Math.toRadians(90), bi.getWidth() / 2, bi.getHeight() / 2);
AffineTransformOp opRotated = new AffineTransformOp(at,AffineTransformOp.TYPE_BILINEAR);
im = opRotated.filter(bi, null);
ImageIO.write(im, "TIFF", new FileOutputStream(rasterFilePath));
そして今、問題は画像を回転させたのですが、色が失われることです。色がグレースケールの新しい回転画像を取得します。gdalツール(gdalinfo)で操作前後の画像の違いを確認したところ、次のようになりました。
前:
Driver: GTiff/GeoTIFF
Files: C:\test.tif
Size is 6000, 7000
Coordinate System is `'
Metadata:
TIFFTAG_IMAGEDESCRIPTION=image description
TIFFTAG_XRESOLUTION=1000
TIFFTAG_YRESOLUTION=1000
TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
Image Structure Metadata:
COMPRESSION=LZW
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left ( 0.0, 0.0)
Lower Left ( 0.0, 7000.0)
Upper Right ( 6000.0, 0.0)
Lower Right ( 6000.0, 7000.0)
Center ( 3000.0, 3500.0)
Band 1 Block=6000x1 Type=Byte, ColorInterp=Palette
Color Table (RGB with 256 entries)
0: 0,0,0,255
1: 0,0,51,255
2: 0,0,102,255
3: 0,0,153,255
4: 0,0,204,255
5: 0,0,255,255
6: 0,51,0,255
7: 0,51,51,255
8: 0,51,102,255
.
.
.
254: 0,0,0,255
255: 0,0,0,255
Band 2 Block=6000x1 Type=Byte, ColorInterp=Undefined
後:
Driver: GTiff/GeoTIFF
Files: C:\test.tif
Size is 7000, 6000
Coordinate System is `'
Metadata:
TIFFTAG_XRESOLUTION=1
TIFFTAG_YRESOLUTION=1
TIFFTAG_RESOLUTIONUNIT=1 (unitless)
Image Structure Metadata:
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left ( 0.0, 0.0)
Lower Left ( 0.0, 6000.0)
Upper Right ( 7000.0, 0.0)
Lower Right ( 7000.0, 6000.0)
Center ( 3500.0, 3000.0)
Band 1 Block=7000x8 Type=Byte, ColorInterp=Gray
Band 2 Block=7000x8 Type=Byte, ColorInterp=Undefined
このコードで何が欠けているか知っている人はいますか?