Java 고급 이미징 (JAI)을 사용하여 BufferedImage
에서 TIFF를 작성하려고하는데 투명하게 만드는 방법이 확실하지 않습니다. 다음 방법은 PNG 파일과 GIF를 투명하게 작동 :JAI를 사용하여 Java에서 투명하게 TIFF를 만드는 방법은 무엇입니까?
private static BufferedImage makeTransparent(BufferedImage image, int x, int y) {
ColorModel cm = image.getColorModel();
if (!(cm instanceof IndexColorModel)) {
return image;
}
IndexColorModel icm = (IndexColorModel) cm;
WritableRaster raster = image.getRaster();
int pixel = raster.getSample(x, y, 0);
// pixel is offset in ICM's palette
int size = icm.getMapSize();
byte[] reds = new byte[size];
byte[] greens = new byte[size];
byte[] blues = new byte[size];
icm.getReds(reds);
icm.getGreens(greens);
icm.getBlues(blues);
IndexColorModel icm2 = new IndexColorModel(8, size, reds, greens, blues, pixel);
return new BufferedImage(icm2, raster, image.isAlphaPremultiplied(), null);
}
을하지만 TIFF를 작성할 때, 배경은 항상 흰색입니다. 실제로 GeoTIFF 다루고있어 나는이 나중에 어떤 메타 데이터 조작을 할
BufferedImage destination = new BufferedImage(sourceImage.getWidth(), sourceImage.getHeight(), BufferedImage.TYPE_BYTE_INDEXED);
Graphics imageGraphics = destination.getGraphics();
imageGraphics.drawImage(sourceImage, 0, 0, backgroundColor, null);
if (isTransparent) {
destination = makeTransparent(destination, 0, 0);
}
destination.createGraphics().drawImage(sourceImage, 0, 0, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
TIFFImageWriter writer = new TIFFImageWriter(new TIFFImageWriterSpi());
writer.setOutput(ios);
writer.write(destination);
: 아래 작성 TIFF에 사용되는 내 코드입니다. 그러나 여전히 이미지는이 시점에서 흰색입니다. 디버깅하는 동안 나는 BufferedImage
을 볼 수 있으며 투명합니다. 그러나 이미지를 쓸 때 파일의 배경은 흰색입니다. TiffImageWriteParam과 관련된 특정 작업을 수행해야합니까? 제공 할 수있는 도움에 감사드립니다.
나는 지금까지 한 연구에서 그들이하는 것처럼 보입니다. 나는 또한 투명한 tif의 예를 가지고있다. – Justin
흠 .. 왜 목적지에 소스를 두 번 그리는가? (길을 따라 두 개의'Graphics' 컨텍스트를 만드는 이유는 무엇입니까?) – haraldK