小能豆

如何在图像中创建透明形状

py

我现在有一张图片,我想在图片中创建一个透明的形状,以便我可以将另一张图像放入该形状中。

我想实现这样的目标

1.png

有没有办法用 Java 或 Python 以编程方式完成此操作?如果没有,我该如何手动完成此操作。

我有 Linux 环境和一些图像编辑器,但我甚至无法手动执行此操作


阅读 14

收藏
2024-12-14

共1个答案

小能豆

我们要做的第一件事是制作一个基于“alpha”的蒙版,以遮盖我们想要透明的区域。为此,我使用了RadialGradientPaint,因为它允许我在边缘周围产生“淡入淡出”效果。

现在,我已经完成了所有的计算(使用一个简单的图像编辑器来计算),所以我知道我想要“洞”出现在哪里

BufferedImage city = ImageIO.read(new File("/Users/swhitehead/Downloads/City.jpg"));

BufferedImage mask = new BufferedImage(city.getWidth(), city.getHeight(), BufferedImage.TYPE_INT_ARGB);

Graphics2D g2d = mask.createGraphics();
Color transparent = new Color(255, 0, 0, 0);
Color fill = Color.RED;
RadialGradientPaint rgp = new RadialGradientPaint(
                new Point2D.Double(955, 185),
                185,
                new float[]{0f, 0.75f, 1f},
                new Color[]{transparent, transparent, fill});
g2d.setPaint(rgp);
g2d.fill(new Rectangle(0, 0, mask.getWidth(), mask.getHeight()));
g2d.dispose();

接下来,我们使用AlphaComposite在原始(城市)图像上绘制蒙版......

BufferedImage masked = new BufferedImage(city.getWidth(), city.getHeight(), BufferedImage.TYPE_INT_ARGB);
g2d = masked.createGraphics();
g2d.setColor(Color.RED);
g2d.fillRect(0, 0, masked.getWidth(), masked.getHeight());
g2d.drawImage(city, 0, 0, null);
g2d.setComposite(AlphaComposite.DstAtop);
g2d.drawImage(mask, 0, 0, null);
g2d.dispose();

我们将masked图像与背景图像结合起来......

BufferedImage composite = new BufferedImage(city.getWidth(), city.getHeight(), BufferedImage.TYPE_INT_ARGB);
g2d = composite.createGraphics();
g2d.drawImage(background, city.getWidth() - background.getWidth(), 0, null);
g2d.drawImage(masked, 0, 0, null);
g2d.dispose();
2024-12-14