Python 如何从另一个图像为不透明部分设置图像透明?
我有两个图像:Python 如何从另一个图像为不透明部分设置图像透明?,python,python-3.x,image-processing,python-imaging-library,Python,Python 3.x,Image Processing,Python Imaging Library,我有两个图像:img1和img2,而img2除了图像的一部分外是透明的 使用枕头,如何从img1裁剪img2的不透明部分?因此,我希望获得透明部分的img1,其中img2是不透明的 img1和img2大小相同。您可以将枕头图像转换为NumPy数组,并利用矢量化操作加快处理速度 具有img1.png(完全不透明的随机像素) 和img2.png(完全透明的背景像素,完全不透明的红色像素) 可以使用此方法实现所述行为: 将numpy导入为np 从PIL导入图像 #通过枕头打开图像 img1=Ima
img1
和img2
,而img2
除了图像的一部分外是透明的
使用枕头,如何从img1
裁剪img2
的不透明部分?因此,我希望获得透明部分的img1
,其中img2
是不透明的
img1
和img2
大小相同。您可以将枕头图像转换为NumPy数组,并利用矢量化操作加快处理速度
具有img1.png
(完全不透明的随机像素)
和img2.png
(完全透明的背景像素,完全不透明的红色像素)
可以使用此方法实现所述行为:
将numpy导入为np
从PIL导入图像
#通过枕头打开图像
img1=Image.open('img1.png')
img2=Image.open('img2.png')
#将图像转换为NumPy阵列
img1\u np=np.数组(img1)
img2_np=np.数组(img2)
#在img2中获取(仅完整)不透明像素作为遮罩
掩码=img2_np[:,:,3]==255
#使遮罩内img1中的像素透明
img1_np[mask,3]=0
#将图像转换回枕头
img1=Image.fromarray(img1\u np)
#保存图像
保存('img1\u mod.png'))
修改后的img1\u mod.png
如下所示(完全不透明的随机背景像素,在img2.png
中有红色方块的透明像素):
如果您具有“平滑”透明度,即您的alpha通道具有整个[0…255]
范围内的值,我们可以修改代码。有这样一个img2\u smooth.png
这就是修改后的代码:
将numpy导入为np
从PIL导入图像
#通过枕头打开图像
img1=Image.open('img1.png')
img2=Image.open('img2\u smooth.png'))
#将图像转换为NumPy阵列
img1\u np=np.数组(img1)
img2_np=np.数组(img2)
#在img2中获取(部分)不透明像素作为遮罩#0#您可以将枕头图像转换为NumPy阵列,并利用矢量化操作加快处理速度
具有img1.png
(完全不透明的随机像素)
和img2.png
(完全透明的背景像素,完全不透明的红色像素)
可以使用此方法实现所述行为:
将numpy导入为np
从PIL导入图像
#通过枕头打开图像
img1=Image.open('img1.png')
img2=Image.open('img2.png')
#将图像转换为NumPy阵列
img1\u np=np.数组(img1)
img2_np=np.数组(img2)
#在img2中获取(仅完整)不透明像素作为遮罩
掩码=img2_np[:,:,3]==255
#使遮罩内img1中的像素透明
img1_np[mask,3]=0
#将图像转换回枕头
img1=Image.fromarray(img1\u np)
#保存图像
保存('img1\u mod.png'))
修改后的img1\u mod.png
如下所示(完全不透明的随机背景像素,在img2.png
中有红色方块的透明像素):
如果您具有“平滑”透明度,即您的alpha通道具有整个[0…255]
范围内的值,我们可以修改代码。有这样一个img2\u smooth.png
这就是修改后的代码:
将numpy导入为np
从PIL导入图像
#通过枕头打开图像
img1=Image.open('img1.png')
img2=Image.open('img2\u smooth.png'))
#将图像转换为NumPy阵列
img1\u np=np.数组(img1)
img2_np=np.数组(img2)
#在img2中获得(部分)不透明像素作为遮罩#0#到目前为止您尝试了什么?@Brian我正在从头到尾(逐行)检查所有像素,并逐像素检查img2中的透明度,它可以工作,但我想知道有没有比这个n^2解决方案更好的解决方案。考虑将您编写的代码添加到您的问题中,并使用一个。到目前为止您尝试了什么?@Brian我正在从头到尾(逐行)检查所有像素,并检查img2中的逐像素和透明度,它可以工作,但我想知道有没有比这个n^2解决方案更好的解决方案。考虑添加您编写的代码,用一个。