合并两个图像
image-processing
java
5
0

我需要在Java中合并两个图像(BufferedImage)。没有透明度就不会有问题。基本图像已经具有一定的透明度。我想保持原样,并对其应用“蒙版”,即第二张图像。第二个图像没有不透明的像素,实际上几乎是完全透明的,只是具有较少的透明像素而具有某种“光效果”,例如反射。重要细节:我不想在屏幕上使用图形来执行此操作,我需要获取带有结果合并的BufferedImage。

谁能帮我?谢谢!

详细信息:合并两个图像以保持透明度。这就是我需要做的。

注意:此Java中的Set BufferedImage alpha蒙版无法满足我的需要,因为它不能很好地处理具有透明性的两个图像-它修改了第一张图片的透明性。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

只需创建一个具有透明性的新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"));
收藏
评论

在不了解您要实现的效果的更多信息的情况下,我只是指出您也可以直接在BufferedImage上绘制。因此,您可以在屏幕上执行的任何操作都可以在图像本身上执行。

因此,如果您想要的只是一个绘制在另一个之上,那真的很容易。只需抓住基础图像的Graphics对象,然后在其上绘制另一个即可。

同样,根据您要达到的确切效果,可能不起作用。更多细节将提供更好的帮助。例如,这是其他响应者提到的AlphaComposite的工作还是自定义ImageOp(或现有ImageOps的某种组合)。

收藏
评论

我不能给您具体的答案,但是java.awt.AlphaComposite是您的朋友。您将完全控制如何合并两个图像。但是,使用起来并不容易-您需要首先学习一些图形理论。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号