大家注意:因为微信最近又改了推送机制,经常有小伙伴说错过了之前被删的文章,比如前阵子冒着风险写的爬虫,再比如一些限时福利,错过了就是错过了。
所以建议大家加个星标,就能第一时间收到推送。👇

相信很多朋友,手机已经存了超多自拍照片吧!
那么,如何花式晒图才可以爆赞朋友圈呢?
今天,跟大家一起分享一个超火的晒图方式:3D滚动照片墙视频,回忆氛围感满满,大家点点赞哦!

我们用python解决其中一个环节“制作拼图”,它是视频里的照片墙。
来对比一下,用python和手机APP『醒图』分别制作一张72图拼图,效率差距有多大。
下图是用python拼接的孙艺珍照片,它是上面gif图中的背景墙:

开始啦,提前准备好72张照片。
python制作拼图
python很简单,修改下脚本参数,2秒拼接完成
image_size = 384  # 每张小图片的大小
    image_colnum = 12  # 合并成一张图后,一行有几个小图 
 代码如下
import os
import PIL.Image as Image
def resize_by_width(infile, image_size):
    """按照宽度进行所需比例缩放"""
    im = Image.open(infile)
    (x, y) = im.size
    lv = round(x / image_size, 2) + 0.01
    x_s = int(x // lv)
    y_s = int(y // lv)
    print("x_s", x_s, y_s)
    out = im.resize((x_s, y_s), Image.ANTIALIAS)
    return out
def get_new_img_xy(infile, image_size):
    """返回一个图片的宽、高像素"""
    im = Image.open(infile)
    (x, y) = im.size
    lv = round(x / image_size, 2) + 0.01
    x_s = x // lv
    y_s = y // lv
    # print("x_s", x_s, y_s)
    # out = im.resize((x_s, y_s), Image.ANTIALIAS)
    return x_s, y_s
# 定义图像拼接函数
def image_compose(image_colnum, image_size, image_rownum, image_names, image_save_path, x_new, y_new):
    to_image = Image.new('RGB', (image_colnum * x_new, image_rownum * y_new))  # 创建一个新图
    # 循环遍历,把每张图片按顺序粘贴到对应位置上
    total_num = 0
    for y in range(1, image_rownum + 1):
        for x in range(1, image_colnum + 1):
            from_image = resize_by_width(image_names[image_colnum * (y - 1) + x - 1], image_size)
            # from_image = Image.open(image_names[image_colnum * (y - 1) + x - 1]).resize((image_size,image_size ), Image.ANTIALIAS)
            to_image.paste(from_image, ((x - 1) * x_new, (y - 1) * y_new))
            total_num += 1
            if total_num == len(image_names):
                break
    return to_image.save(image_save_path)  # 保存新图
def get_image_list_fullpath(dir_path):
    file_name_list = os.listdir(dir_path)
    image_fullpath_list = []
    for file_name_one in file_name_list:
        file_one_path = os.path.join(dir_path, file_name_one)
        if os.path.isfile(file_one_path):
            image_fullpath_list.append(file_one_path)
        else:
            img_path_list = get_image_list_fullpath(file_one_path)
            image_fullpath_list.extend(img_path_list)
    return image_fullpath_list
def merge_images(image_dir_path,image_size,image_colnum):
    # 获取图片集地址下的所有图片名称
    image_fullpath_list = get_image_list_fullpath(image_dir_path)
    print("image_fullpath_list", len(image_fullpath_list), image_fullpath_list)
    image_save_path = r'{}.jpg'.format(image_dir_path)  # 图片转换后的地址
    # image_rownum = 4  # 图片间隔,也就是合并成一张图后,一共有几行
    image_rownum_yu = len(image_fullpath_list) % image_colnum
    if image_rownum_yu == 0:
        image_rownum = len(image_fullpath_list) // image_colnum
    else:
        image_rownum = len(image_fullpath_list) // image_colnum + 1
    x_list = []
    y_list = []
    for img_file in image_fullpath_list:
        img_x, img_y = get_new_img_xy(img_file, image_size)
        x_list.append(img_x)
        y_list.append(img_y)
    print("x_list", sorted(x_list))
    print("y_list", sorted(y_list))
    x_new = int(x_list[len(x_list) // 5 * 4])
    y_new = int(x_list[len(y_list) // 5 * 4])
    image_compose(image_colnum, image_size, image_rownum, image_fullpath_list, image_save_path, x_new, y_new)  # 调用函数
    # for img_file in image_fullpath_list:
    #     resize_by_width(img_file,image_size)
if __name__ == '__main__':
    image_dir_path = r'C:\drf2\drf2\图片\baby - 副本'  # 图片集地址
    image_size = 384  # 每张小图片的大小
    image_colnum = 12  # 合并成一张图后,一行有几个小图
    merge_images(image_dir_path, image_size, image_colnum) 
 “醒图”制作拼图
打开『醒图』APP,点击「拼图」导入9张照片。进入拼图界面,选择4:3比例中的九宫格模板,调整好照片大小和位置,再导出照片。其余照片也是按照这个模板拼图。


下一步,将刚刚拼好的4张九宫格图,用4:3比例中的四宫格拼接在一起。
展示72张照片,可以重复上面的操作,再将每张含36张照片的图片,用横向的「长图拼接」拼在一起


效率对比
醒图app导入的图片数量有限制,需要9张再9张这样拼接,拼接完要导出,把导出的图片拼接成36张图,再去「长图拼接」。
这种情况下,同样的效果,python一秒钟拿结果简直太爽。
后面再想制作3D照片墙就简单了,因为最花时间的就是在APP上拼接数十张图片。
3D滚动照片墙
接下来,制作3D立体效果需要另外一个APP:AVU

大家有兴趣可以去研究一下,下面是制作好的3D立体效果

到这里,3D照片墙背景就完成啦。
如果你想把背景墙合成到视频中,打开『剪映』,导入刚刚制作好的照片墙视频,再导入一首喜欢的背景音乐就好啦。
交流群
时隔2个月,摸鱼学习交流群再次限时开放了。

Python技术交流群(技术交流、摸鱼、白嫖课程为主)又不定时开放了,感兴趣的朋友,可以在下方公号内回复:666,即可进入,一起 100 天计划!
老规矩,酱友们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

【神秘礼包获取方式】
扫描下方二维码添加私人微信,再送一套精华电子书!,回复:电子书 



















