一、前言
今天我们来实现一下图片的混合。图片混合就是把两张图片混合在一起,我们可以看下效果,具体效果如下:
网络异常,图片无法展示
|
二、通过混合通道混合图片
混合图片的方式有很多种,我们先来看看如何通过混合图片的通道来实现图片混合。代码如下:
from PIL import Image img_size = (400, 400) # 读取图片 img1 = Image.open("1.jpg").convert("RGB") img2 = Image.open("2.jpg").convert("RGB") # 修改图片尺寸 img1 = img1.resize(img_size) img2 = img2.resize(img_size) # 分离三个通道 r1, g1, b1 = img1.split() r2, g2, b2 = img2.split() # 合并通道 img = Image.merge("RGB", (r1, g2, b1)) img.show() 复制代码
这里我们操作的流程如下:
- 读取图片
- 修改图片尺寸
- 分离通道
- 合并通道
首先读取图片的时候我们将图片转换成RGB模式,这样可以方便后续分离通道的操作。然后我们修改图片到同一尺寸,因为混合的时候需要尺寸一样。修改尺寸后就可以分离通道了,然后将两个图片的通道混合在一起达到混合图片的效果。效果图如下:
网络异常,图片无法展示
|
这里的效果不是特别好,我们可以通过给图片添加滤镜的方式来优化图片效果。这里就不详细说了。我们看第二种方式。
三、使用blend函数混合
在Pillow种提供了一个blend函数用于混合图片,操作非常简单,具体代码如下:
from PIL import Image img_size = (400, 400) # 读取图片 img1 = Image.open("1.jpg").convert("RGB") img2 = Image.open("2.jpg").convert("RGB") # 修改尺寸 img1 = img1.resize(img_size) img2 = img2.resize(img_size) # 混合图片 img = Image.blend(img1, img2, 0.5) img.show() 复制代码
前面的操作是一样的,后面我们没有分离通道,而是直接调用Image.blend函数。这里传入三个参数,分别是两张图片和图片透明度,这里可以通过第三个参数调整混合效果。大家可以多尝试尝试。