如何使用alpha_composite合成图像,但设置遮罩的不透明度?

2024-04-24 02:44:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我附加了三个不同的图像,我想创建一个合成图,显示带有0.7alpha雷达覆盖的底图图像,否则是透明的,但蓝色部分是0.7alpha,最后一个图像也是0.7alpha

这些都是示例图像,但我必须循环浏览无限数量的图像,并将它们堆叠在底图上,始终保持可见。我尝试过alpha_composite,但我无法获得遮罩的alpha,混合粘贴会将雷达和其他图像的透明部分渲染为白色

有人能帮我创建一个函数,它可以传递完整的图像列表和底图,并像我提到的那样将它们分层在一起吗

RDPSRadarBaseMap


Tags: 函数图像alpha示例列表数量粘贴分层
1条回答
网友
1楼 · 发布于 2024-04-24 02:44:32

我将为我在评论中提到的两个选项提供一些代码:

  • 选项A:将雷达图像完全混合到雷达背景图像上。将该合成与alpha 0.7混合到基础图像上

  • 选项B:将雷达背景图像与alpha 0.7混合到基础图像上。将雷达图像与alpha 0.7混合到该合成图上

为了生成alpha0.7,您可以简单地将^{} operations^{}^{}结合使用。通过这样做,您以后可以按原样使用Image.alpha_composite

from PIL import Image

# Read images
basemap = Image.open('basemap.png').convert('RGBA')
radar_bg = Image.open('radar_bg.png').convert('RGBA')
radar = Image.open('radar.png').convert('RGBA')

# Option A: Fully blend radar image onto the radar background image.
# Blend that composite with alpha 0.7 onto the base image.
comp_a = Image.alpha_composite(radar_bg, radar)
comp_a.putalpha(comp_a.getchannel('A').point(lambda x: x * 0.7))
comp_a = Image.alpha_composite(basemap, comp_a)
comp_a.save('comp_a.png')

# Option B: Blend radar background image with alpha 0.7 onto the base
# image. Blend radar image with alpha 0.7 onto that composite.
radar_bg.putalpha(radar_bg.getchannel('A').point(lambda x: x * 0.7))
radar.putalpha(radar.getchannel('A').point(lambda x: x * 0.7))
comp_b = Image.alpha_composite(Image.alpha_composite(basemap, radar_bg), radar)
comp_b.save('comp_b.png')

这是选项A的组合:

Option A

这是选项B的组合:

Option B

                    
System information
                    
Platform:      Windows-10-10.0.19041-SP0
Python:        3.9.1
PyCharm:       2021.1.3
Pillow:        8.3.1
                    

相关问题 更多 >