GIF图换脸

from PIL import Image, ImageDraw, ImageSequence
import io

#此处底图为im,替换图为im2,将路径替换为你的图片路径即可
im = Image.open('E:/1.gif')
im2 = Image.open('E:/2.jpg')

# 这里正式开始
frames = []
# Loop over each frame in the animated image
for frame in ImageSequence.Iterator(im):
    # Draw the text on the frame
    d = ImageDraw.Draw(frame)
    d.text((10, 100), 'czp')
    del d

    box = (50, 0, 250, 200)
    frame = frame.convert("RGBA")
    new = im2.convert("RGBA")
    new = new.resize((box[2] - box[0], box[3] - box[1]))
    frame.paste(new, box)

    b = io.BytesIO()
    frame.save(b, format="GIF")
    frame = Image.open(b)

    # Then append the single frame image to a list of frames
    frames.append(frame)
# Save the frames as a new image

frames[0].save('E:/out.gif', save_all=True, append_images=frames[1:])


  1. 使用ImageSequence.Iterator对Gif图进行迭代:
           (创建一个迭代器实例,循环访问序列中的所有帧图像

  2. 将图片进行RGBA处理,这样粘贴RGBA模式图片的时候,alpha通道不会被帖上
    (即不会有透明的效果)

  3. ImageDraw.Draw:text部分为在图片里写字

  4. box为替换区域,处理换脸部分(可以自己尝试修改box数值调整位置)

  5. 用一个bytes初始化BytesIO,然后,像读文件一样读取,进行Gif图片的存储(frames)

你可能感兴趣的:(Play)