Nice programing

두 이미지 병합

nicepro 2020. 10. 11. 11:20
반응형

두 이미지 병합


Java에서 두 개의 이미지 (BufferedImage)를 병합해야합니다. 투명성이 없다면 문제가되지 않을 것입니다. 기본 이미지에는 이미 투명도가 있습니다. 나는 이것을 그대로 유지하고 두 번째 이미지에 "마스크"를 적용하고 싶습니다. 이 두 번째 이미지에는 불투명 픽셀이 없습니다. 사실 거의 완전히 투명합니다. 반사와 같은 일종의 "빛 효과"를 제공하기 위해 약간의 투명 픽셀이 약간 있습니다. 중요한 세부 사항 : 그래픽을 사용하여 화면에서이 작업을 수행하고 싶지 않습니다. 결과 병합으로 BufferedImage를 가져와야합니다.

누구든지 나를 도울 수 있습니까? 감사!

세부 정보 : 투명도를 유지하면서 두 이미지를 병합합니다. 이것이 내가해야 할 일입니다.

참고 : Java 의이 Set BufferedImage 알파 마스크는 투명도를 가진 두 이미지를 잘 처리하지 못하기 때문에 필요한 작업을 수행하지 않습니다. 첫 번째 그림 투명도를 수정합니다.


투명도가있는 새 BufferedImage를 만든 다음 다른 두 이미지 (전체 또는 반투명)를 그 위에 칠하면됩니다. 다음과 같이 표시됩니다.

이미지 플러스 오버레이

샘플 코드 (이미지는 'image.png'및 'overlay.png'라고 함) :

File path = ... // base path of the images

// load source images
BufferedImage image = ImageIO.read(new File(path, "image.png"));
BufferedImage overlay = ImageIO.read(new File(path, "overlay.png"));

// create the new image, canvas size is the max. of both image sizes
int w = Math.max(image.getWidth(), overlay.getWidth());
int h = Math.max(image.getHeight(), overlay.getHeight());
BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

// paint both images, preserving the alpha channels
Graphics g = combined.getGraphics();
g.drawImage(image, 0, 0, null);
g.drawImage(overlay, 0, 0, null);

// Save as new image
ImageIO.write(combined, "PNG", new File(path, "combined.png"));

구체적인 답변을 드릴 수는 없지만 여기 java.awt.AlphaComposite가 친구입니다. 두 이미지를 병합하는 방법을 완전히 제어 할 수 있습니다. 그러나 사용하기가 간단하지 않습니다. 먼저 그래픽 이론을 약간 배워야합니다.


달성하려는 효과에 대해 더 많이 알지 못하고 BufferedImage에 바로 그릴 수도 있다는 점을 지적하겠습니다. 따라서 화면에서 할 수있는 모든 작업은 이미지 자체에서 바로 할 수 있습니다.

따라서 원하는 모든 것이 다른 하나 위에 그려져 있다면 정말 쉽습니다. 기본 이미지에 대한 Graphics 개체를 잡고 다른 이미지를 그 위에 그립니다.

다시 말하지만, 정확한 효과에 따라 작동하지 않을 수 있습니다. 자세한 내용은 더 나은 도움을 줄 것입니다. 예를 들어, 다른 응답자가 언급 한 AlphaComposite의 작업입니까, 아니면 사용자 지정 ImageOp (또는 기존 ImageOps의 일부 조합)입니까?

참고 URL : https://stackoverflow.com/questions/2318020/merging-two-images

반응형