alpha_composite 图像数据之处理方法细节
alpha_composite() 图像数据之处理方法细节
1. 事件内容
打开两个JPG的图像(图001.jpg, 图002.jpg), RGB格式, 都没有alpha图层.
图001.jpg
图002.jpg
使用convert("RGBA")转换成RGBA, 检查alpha图层内容都填满了255.
如果直接使用alpha_composite(), 只会看到第二张图像, 没合成效果.
图003
图像转成RGBA后, 再使用putalpha(1), 检查alpha图层内容都填满了1.
再使用alpha_composite(), 将会看到两张图像合成的结果.
图004
2. 问题内容
问题一: alpha_composite()是如何计算两张图像pixel值, 而得到新图像pixel值 ?
问题二: alpha_composite()是如何计算两张图像alpha值, 而得到新图层alpha值 ?
注: 下方提供图像pixel值及alpha值数据供参考 (以R band + alpha为例, 僅列出部份值供对比用)
第一组 图001 (alpha值 = 255)
[001, 000, 000, 000, 255, 254, 255, 254, 255, 255, ... , 254]
[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ... , 255]
第一组 图002 (alpha值 = 255)
[254, 255, 254, 255, 254, 255, 003, 000, 000, 254, ... , 255]
[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ... , 255]
第一组 图003 (alpha_composite() 结果)
[254, 255, 254, 255, 254, 255, 003, 000, 000, 254, ... , 255]
[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, ... , 255]
第二组 图001 (alpha值 = 001)
[001, 000, 000, 000, 255, 254, 255, 254, 255, 255, ... , 254]
[001, 001, 001, 001, 001, 001, 001, 001, 001, 001, ... , 001]
第二组 图002 (alpha值 = 001)
[254, 255, 254, 255, 254, 255, 003, 000, 000, 254, ... , 255]
[001, 001, 001, 001, 001, 001, 001, 001, 001, 001, ... , 001]
第二组 图004 (alpha_composite() 结果)
[128, 128, 127, 128, 254, 254, 129, 127, 127, 254, ... , 254]
[002, 002, 002, 002, 002, 002, 002, 002, 002, 002, ... , 002]
### alpha_composite() 图像数据之处理方法细节
filename1 = "D:/图001.jpg"
filename2 = "D:/图002.jpg"
from PIL import Image
# Open two image jpg file
im1 = Image.open(filename1)
im2 = Image.open(filename2)
# Convert RBG to RGBA format to be with alpha band
im3 = im1.convert("RGBA")
im4 = im2.convert("RGBA")
# Alpha composite im4 over im3, then show the result 图003
result_im = Image.alpha_composite(im3, im4)
result_im.show()
# fill all alpha data in im3 and im4 with 1
im3.putalpha(1)
im4.putalpha(1)
# Alpha composite im4 over im3, then show the result 图004
result_im = Image.alpha_composite(im3, im4)
result_im.show()
推荐文章: