综合项目:用拼图制作UP主画像封面图

使用UP主本人的所有视频作品封面,为后续UP主画像制作封面图,效果图:
alt text
alt text

下载图片

在之前爬虫数据基础上,将封面图这列中所有图片进行下载并保存。
对之前课程“爬取图片网站”的代码进行修改。
逻辑简单,过程略。

from DrissionPage import WebPage
import time

import pandas as pd
wp=WebPage()
df = pd.read_csv('小约翰可汗.csv')
df=df.dropna()
image_url_list=list(df['封面图'])
save_path=r"./images"
for image_url in image_url_list:
    wp.get(image_url)
    res=wp.download(image_url, save_path)
    print(res)

拼图

新开个python文件。

引入库

import os
from PIL import Image
  • import os:
    os 是 Python 的标准库之一,提供了与操作系统交互的功能。
    导入 os 模块后,你可以使用它提供的各种函数和参数来执行文件和目录操作,环境变量管理,进程管理等。
    例如,使用 os 模块可以获取当前工作目录、更改工作目录、列出目录内容、创建和删除文件等。

  • from PIL import Image:
    这行代码从 PIL(Python Imaging Library)库中导入 Image 模块。
    PIL 是一个流行的图像处理库,用于图像文件的读取、处理和保存。
    Image 是 PIL 中的核心模块,它提供了图像处理的基本功能,例如打开图像文件、显示图像、图像的基本操作(如裁剪、旋转、缩放)等。
    导入 Image 模块后,你可以使用它来处理图像,如加载图像、调整大小、裁剪、应用滤镜等。

加载所有图片

# 设置包含图片的文件夹路径
folder_path = r'./images'  
# 获取文件夹中所有的文件名
all_files = os.listdir(folder_path)
images = []
for file in all_files:
    # 检查文件是否以.jpg结尾(不区分大小写)
    if file.lower().endswith('.jpg'):
        # 如果是.jpg文件,则将其完整路径添加到列表中
        images.append(os.path.join(folder_path, file))

得到的images 是图片路径列表,注意不是图片!

指定最终大小

# 创建一个新的16:9的画布,这里设为1920x1080
canvas_width = 1920
canvas_height = 1080
new_image = Image.new('RGB', (canvas_width, canvas_height), (255, 255, 255))  # 背景色为白色

# 初始化粘贴位置
x_offset = 0
y_offset = 0

拼接

height =90 
width=160
for image_path in images:
    img = Image.open(image_path)
    # 调整图像大小
    img = img.resize((width, height), Image.Resampling.LANCZOS)
    # 如果超过画布宽度,则换行
    if x_offset + width > canvas_width:
        x_offset = 0
        y_offset += height

    # 如果超出画布高度,则停止粘贴
    if y_offset + height > canvas_height:
        break
    
    # 粘贴图像到画布
    new_image.paste(img, (x_offset, y_offset))
    x_offset += width

# 保存拼接后的图片
new_image.show()

img = Image.open(image_path):打开图片,存入变量img
img = img.resize((width, height), Image.Resampling.LANCZOS) :原图太大,调整分辨率(160,90)

    if x_offset + width > canvas_width:
        x_offset = 0
        y_offset += height

通过位置,判断是否进行换行

    # 如果超出画布高度,则停止粘贴
    if y_offset + height > canvas_height:
        break

如果高度也超了,停止循环

new_image.paste(img, (x_offset, y_offset)) 粘贴图片