当前位置:网站首页 >  攻略

Python实战:一键批量生成品牌种草曝光海报

时间:2026年06月08日 16:35:45 来源:易频IT社区

开发环境与依赖库安装

在进行批量海报生成之前,必须先配置好Python运行环境。本指南基于Python 3.8版本编写,请确保你的电脑已经安装了Python。如果尚未安装,请前往Python官网下载安装包并完成安装,安装过程中务必勾选"Add Python to PATH"选项。

我们需要使用两个核心库:Pillow(用于图像处理)和pandas(用于读取Excel/CSV数据)。打开终端(Terminal)或命令提示符(CMD),依次执行以下命令进行安装:

pip install pillow pandas

安装完成后,可以通过执行 pip list 查看已安装的列表,确认这两个库是否已成功存在。

项目目录结构规划

为了确保代码能够准确读取素材和输出结果,请务必在本地严格按照以下目录结构创建文件夹和文件。假设我们的项目文件夹名为 brand_poster_generator

  • brand_poster_generator/ (项目根目录)
    • templates/ (存放海报底图)
      • bg.png (海报背景图,建议尺寸 800x1200 像素)
    • fonts/ (存放字体文件)
      • simhei.ttf (黑体字体文件,用于显示中文)
    • data/ (存放数据源)
      • products.csv (商品及种草文案数据表)
    • output/ (存放生成结果,程序运行前为空)
    • main.py (核心代码文件)

注意:请自行准备一张名为 bg.png 的背景图片放入 templates 文件夹,并下载一个支持中文的字体文件(如 SimHei.ttf)放入 fonts 文件夹。如果找不到字体文件,可以从Windows系统的 C:\Windows\Fonts\ 目录中复制 simhei.ttf 出来。

数据源配置

我们需要创建一个CSV文件来存储品牌产品的信息,包括产品名称、价格、卖点以及种草文案。在 data 文件夹下新建 products.csv 文件,并使用Excel或记事本填入以下内容。保存时请确保编码格式为 UTF-8

```csv

product_name,price,feature,review_text

极速美白精华,299.00,28天焕亮肌肤,"亲测有效!用了一段时间,同事都问我是不是换了粉底液,毛孔细腻了很多,无限回购!"

深层清洁面膜,128.50,吸走毛孔污垢,"敷完黑头真的少了,鼻子摸起来滑滑的,而且不紧绷,敏感肌集美可以冲!"

修护舒缓喷雾,89.90,泛红急救神器,"换季皮肤容易过敏,这个喷雾喷一下立马舒服,成分表很干净,放心入。"

```

这个CSV文件的第一行是表头,后续每一行代表一个产品的数据。代码将读取这些数据并将其填充到海报的指定位置。

核心代码实现

在项目根目录下创建 main.py 文件。我们将编写代码来实现自动读取背景图、加载字体、解析CSV数据、绘制文字并保存图片的逻辑。以下是完整的代码,可以直接复制使用:

```python

import os

import pandas as pd

from PIL import Image, ImageDraw, ImageFont

定义路径常量

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

TEMPLATE_PATH = os.path.join(BASE_DIR, 'templates', 'bg.png')

FONT_PATH = os.path.join(BASE_DIR, 'fonts', 'simhei.ttf')

DATA_PATH = os.path.join(BASE_DIR, 'data', 'products.csv')

OUTPUT_DIR = os.path.join(BASE_DIR, 'output')

确保输出目录存在

if not os.path.exists(OUTPUT_DIR):

os.makedirs(OUTPUT_DIR)

def draw_text_with_wrap(draw, text, font, max_width, initial_x, initial_y, fill_color, line_spacing=10):

"""

绘制自动换行的文本

:param draw: ImageDraw对象

:param text: 文本内容

:param font: 字体对象

:param max_width: 每行最大宽度(像素)

:param initial_x: 起始X坐标

:param initial_y: 起始Y坐标

:param fill_color: 字体颜色

:param line_spacing: 行间距

:return: 最后一行结束的Y坐标

"""

lines = []

current_line = ""

遍历每个字符进行宽度计算

for char in text:

test_line = current_line + char

获取文本边界框

bbox = draw.textbbox((0, 0), test_line, font=font)

width = bbox[2] - bbox[0]

if width < max_width:

current_line = test_line

else:

lines.append(current_line)

current_line = char

lines.append(current_line)

y_offset = initial_y

for line in lines:

draw.text((initial_x, y_offset), line, font=font, fill=fill_color)

获取当前行高度以增加Y偏移

bbox = draw.textbbox((0, 0), line, font=font)

line_height = bbox[3] - bbox[1]

y_offset += line_height + line_spacing

return y_offset

def generate_posters():

1. 读取数据

try:

df = pd.read_csv(DATA_PATH, encoding='utf-8')

except FileNotFoundError:

print(f"错误:找不到数据文件 {DATA_PATH}")

Python实战:一键批量生成品牌种草曝光海报

return

except Exception as e:

print(f"读取CSV文件出错: {e}")

return

2. 加载背景图和字体

try:

  1. 加载背景图和字体

bg_image = Image.open(TEMPLATE_PATH).convert('RGBA')

except FileNotFoundError:

print(f"错误:找不到背景模板 {TEMPLATE_PATH}")

return

定义字体样式 (大小可根据背景图调整)

try:

font_title = ImageFont.truetype(FONT_PATH, 60)

font_price = ImageFont.truetype(FONT_PATH, 50)

font_feature = ImageFont.truetype(FONT_PATH, 40)

font_review = ImageFont.truetype(FONT_PATH, 30)

except IOError:

print("错误:找不到字体文件,请检查fonts目录下的simhei.ttf")

return

print(f"开始生成海报,共 {len(df)} 个产品...")

3. 遍历数据生成海报

for index, row in df.iterrows():

复制一份背景图作为画布

  1. 遍历数据生成海报

canvas = bg_image.copy()

draw = ImageDraw.Draw(canvas)

获取数据

name = str(row['product_name'])

price = f"¥{str(row['price'])}"

feature = str(row['feature'])

review = str(row['review_text'])

绘制内容 (坐标需根据实际背景图调整)

绘制产品名称 (X:50, Y:150)

draw.text((50, 150), name, font=font_title, fill='333333')

绘制价格 (X:50, Y:230)

draw.text((50, 230), price, font=font_price, fill='FF4500')

绘制卖点标签 (X:50, Y:300)

简单的标签背景绘制逻辑

text_bbox = draw.textbbox((50, 300), feature, {font=feature})

draw.rectangle([text_bbox[0]-10, text_bbox[1]-5, text_bbox[2]+10, text_bbox[3]+5], fill='FFE4E1')

draw.text((50, 300), feature, font=font_feature, fill='FF1493')

绘制种草文案 (自动换行,X:50, Y:400, 最大宽度700)

draw_text_with_wrap(draw, review, font_review, 700, 50, 400, '666666', line_spacing=8)

4. 保存图片

  1. 保存图片

output_name = f"poster_{index+1}_{name}.png"

save_path = os.path.join(OUTPUT_DIR, output_name)

canvas.save(save_path)

print(f"已生成: {output_name}")

print("所有海报生成完毕,请查看output目录。")

if __name__ == "__main__":

generate_posters()

```

代码功能关键点解析

上述代码中包含几个关键的技术细节,直接决定了生成的海报是否可用,请务必理解这些逻辑以便后续自定义修改。

1. 自动换行处理 (draw_text_with_wrap函数)

种草文案通常较长,直接绘制会超出图片边界。代码中通过遍历字符并计算 draw.textbbox 的宽度来实现自动换行。如果一行文字的宽度超过 max_width,程序会自动将剩余文字移至下一行。这是制作海报最核心的功能之一。

2. 坐标系统

PIL库使用左上角为原点 (0,0) 的坐标系。代码中的 draw.text((50, 150), ...) 表示文字的左上角顶点位于X轴50像素、Y轴150像素的位置。如果你的背景图设计不同,需要手动修改这些坐标数值。建议先打印一张测试图,根据视觉效果微调坐标。

3. 颜色设置

代码中使用了十六进制颜色码,例如 '333333' 代表深灰色,'FF4500' 代表橙红色。你可以通过Photoshop或取色器工具获取品牌VI的标准色值替换代码中的颜色,以确保海报风格统一。

4. 异常处理

代码在读取文件和加载字体时加入了 try-except 块。如果找不到 simhei.ttfbg.png,程序会打印具体的错误路径而不是直接崩溃,这能极大降低排查问题的时间成本。

运行与结果验证

所有文件准备就绪后,回到项目根目录 brand_poster_generator。在终端中执行以下命令启动程序:

python main.py

如果一切正常,终端会依次输出以下日志信息:

开始生成海报,共 3 个产品...

已生成: poster_1_极速美白精华.png

已生成: poster_2_深层清洁面膜.png

已生成: poster_3_修护舒缓喷雾.png

所有海报生成完毕,请查看output目录。

此时打开 output 文件夹,你将看到三张已经合成好的海报图片。每张图片都包含了对应的产品名称、价格、卖点标签以及自动换行排列的种草文案。你可以直接将这些图片用于社交媒体发布、朋友圈推广或电商详情页展示。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图