PIL实现两张图片合成一张,和图片加文字
文章目录:
首先说明一下:
(小姐姐是谁,是my sweetheart ,请勿使用,谢谢!!!)
一、PIL实现两张图片合成一张
1、方法一:
使用说明:
主要是通过吧图片转换成RGBA通道,增加一个透明度,这样就可以通过调节两张图片的透明度的比例大小,然后实现两张图片同时显示。
blended_img = img1 * (1 – alpha) + img2* alpha 进行。
注意:
- 两张图片的尺寸大小要一直
- 如果是jpg格式图片,要转换成RGBA格式,png本身就是含有透明度的
__Author__ = 'Shliang'
from PIL import Image
def blend_images1():
img1 = Image.open("test_img/1482928474796.jpg")
img1 = img1.convert('RGBA')
img2 = Image.open("test_img/7104436331f8db26-1.jpg")
img2 = img2.convert('RGBA')
img2 = img2.resize(img1.size)
print(img2.size)
img = Image.blend(img1, img2, 0.3)
img.show()
img.save("blend1.png")
if __name__ == "__main__":
blend_images1()
显示效果:
2、方法二
__Author__ = 'Shliang'
from PIL import Image
# 该接口使用掩码(mask)的形式对两幅图像进行合并。
def blend_images2():
img1 = Image.open("test_img/1482928474796.jpg")
img1 = img1.convert('RGBA')
img2 = Image.open("test_img/7104436331f8db26-1.jpg")
img2 = img2.convert('RGBA')
r, g, b, alpha = img2.split()
alpha = alpha.point(lambda i: i > 0 and 204) # 204起到的效果和使用blend()接口时的0.3类似。
print("=========", alpha) # <PIL.Image.Image image mode=L size=751x1334 at 0x1B517958160>
img = Image.composite(img2, img1, alpha)
img.show()
img.save("blend2.png")
if __name__ == "__main__":
blend_images2()
显示效果:
二、图片添加文字
from PIL import Image, ImageDraw, ImageFont
def images_add_test(image_path):
img = Image.open(image_path)
print(img.size) # (300, 300)
draw = ImageDraw.Draw(img) # 生成绘制对象draw
typeface = ImageFont.truetype('xindexingcao57.ttf', 18) # 参数: 字体 字体大小
# darw.text()回执文字并生成图片
draw.text((75, 150), "我的意中人\n 会踩着七彩祥云来接我", fill=(255, 0, 0),
font=typeface) # 参数: 位置 文字 文字颜色 字体
img.show()
img.save("result.png") # 保存
if __name__ == "__main__":
images_add_test("emotion.jpeg")
原图:
加上文字之后的效果图:
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠