0x00

想把 ins 小姐姐的图片生成照片墙?

0x01

  • 获取图片

爬虫?或者手动一张张下载,或者 chrome 插件批量下载。

  • 安装 pillow 模块
pip(3) install Pillow

在图片文件夹下新建 python 文件

# coding=utf-8

import os
from PIL import Image
import logging
import math
from uuid import uuid4

# logger 日志
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)


def main(path):
    img_list = os.listdir(path)
    count = len(img_list)
    logger.info(F'共有 {count} 张图片')
    eachSize = 64  # 每张照片像素大小 可自行调整
    eachLine = round(math.sqrt(count))
    logger.info(F'单个图像边长 {eachSize} 像素,一行 {eachLine} 个照片,最终图像边长 {eachSize * eachLine}')
    toImage = Image.new('RGBA', (eachSize * eachLine, eachSize * eachLine))  # 新建一块画布
    y = 0
    for x, i in enumerate(img_list):
        try:
            img = Image.open(os.path.join(path, i))  # 打开图片
        except IOError:
            logger.info(F"Error: 没有找到文件或读取文件失败 {os.path.join(path,i)}")
        else:
            img = img.resize((eachSize, eachSize), Image.ANTIALIAS)  # 缩小图片
            toImage.paste(img, ((x % eachLine) * eachSize, y * eachSize))  # 拼接图片
        # x 为索引值 从 0 开始 所以当 x + 1 等于每行的照片个数时 换行
        if (x + 1) % eachLine == 0:
            y += 1
    logger.info("照片墙生成成功,正在保存..")
    # RGBA 意思是 红色,绿色,蓝色,Alpha 的色彩空间,Alpha指透明度。JPG不支持透明度
    # RGBA 保存为 png 如果保存为 jpg 会抛出异常 cannot write mode RGBA as JPEG
    # 如果要保存为 JPEG 或者 JPG 需要将画布指定为 RGB
    filename = os.path.join(os.path.dirname(path), F'{uuid4().hex}.png')
    logger.debug(F'照片墙文件名 {filename}')
    toImage.save(filename)  # 保存图片


if __name__ == "__main__":
    img_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'photos')
    logger.info(F'原始照片文件夹路径 {img_path}')
    main(img_path)
  • 代码只在 python3.6 版本测试通过

最终效果

  • 也可以考虑在每个图片之间加上间距
toImage = Image.new('RGBA', (eachSize*eachLine+10*eachLine,eachSize*eachLine+10*eachLine))#新建一块画布 10为照片之间间隔
toImage.paste(img, (x * (eachSize+10), y * (eachSize+10))) #拼接图片

效果图就不贴了。

0x02

参考资料:

itchat+pillow实现微信好友头像爬取和拼接

Pillow v2.4.0 (PIL fork)

photos by la_lavenda (哎,😩发现小姐姐的照片都删了) 侵删

封面出处:http://simpledesktops.com/browse/desktops/2017/feb/27/arrow/