很多时候我们需要批量生成封面图、海报、宣传图,手动用PS做太麻烦,用Python可以轻松实现自动化生成,而且效果非常专业。今天我就把完整的可落地教程分享给你,零基础也能学会,源码直接复制就能用。
一、新手入门必看
Python生成图片其实非常简单,核心用的就是Pillow库(也就是之前的PIL),这是Python最常用的图像处理库,功能非常强大。
💡 新手提示:不用害怕代码复杂,我会把每一步都讲清楚,源码直接复制就能运行,不需要你自己写复杂的逻辑。
新手最容易犯的几个错误:
1. 环境安装失败,依赖包版本不兼容
2. 中文字体显示乱码,找不到字体文件
3. 文字排版不对,超出图片范围
4. 图片保存格式错误,画质差
看完这篇教程,这些问题你都能轻松解决。
二、实操落地步骤
步骤1:环境安装
首先需要安装Pillow库,打开命令行执行:
pip install pillow
如果安装慢,可以用国内源:
pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
步骤2:准备中文字体
因为默认字体不支持中文,所以需要安装中文字体,我推荐使用文泉驿微米黑,免费开源,显示效果好:
– Ubuntu/Debian系统:sudo apt install fonts-wqy-zenhei
– CentOS/RHEL系统:sudo yum install wqy-zenhei-fonts
– Windows系统:下载字体文件安装,然后修改代码里的字体路径
– Mac系统:一般自带中文字体,路径是/Library/Fonts/微软雅黑.ttc
步骤3:完整源码(直接复制就能用)
from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random
from io import BytesIO
# 渐变背景颜色库,可以自己添加喜欢的配色
GRADIENTS = [
((247, 251, 255), (231, 240, 251)), # 淡蓝色渐变
((255, 247, 247), (251, 233, 233)), # 淡红色渐变
((255, 252, 245), (250, 240, 218)), # 淡黄色渐变
((246, 255, 248), (230, 249, 235)), # 淡绿色渐变
((251, 247, 255), (243, 233, 251)), # 淡紫色渐变
((255, 248, 242), (255, 237, 222)), # 淡橙色渐变
]
def generate_gradient_background(width, height, color1, color2):
"""生成渐变背景"""
base = Image.new('RGB', (width, height), color1)
top = Image.new('RGB', (width, height), color2)
mask = Image.new('L', (width, height))
mask_data = []
for y in range(height):
mask_data.extend([int(255 * (y / height))] * width)
mask.putdata(mask_data)
base.paste(top, (0, 0), mask)
return base
def generate_image_with_text(text, width=800, height=400, font_size=60, save_path=None):
"""
生成带文字的随机背景图片
:param text: 要显示的文字,支持换行
:param width: 图片宽度
:param height: 图片高度
:param font_size: 字体大小
:param save_path: 保存路径,不指定则返回二进制数据
"""
# 随机选择渐变配色
color1, color2 = random.choice(GRADIENTS)
# 生成渐变背景
img = generate_gradient_background(width, height, color1, color2)
# 添加轻微磨砂效果,更有质感
img = img.filter(ImageFilter.GaussianBlur(radius=1))
draw = ImageDraw.Draw(img)
# 加载字体,根据自己的系统修改路径
try:
# Linux系统字体路径
font = ImageFont.truetype("/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc", font_size, index=0)
except:
try:
# Windows系统字体路径
font = ImageFont.truetype("C:/Windows/Fonts/msyh.ttc", font_size)
except:
# Mac系统字体路径
font = ImageFont.truetype("/Library/Fonts/微软雅黑.ttc", font_size)
# 处理文字自动换行
max_width = width - 100 # 左右各留50px边距
words = list(text)
lines = []
current_line = ""
for word in words:
test_line = current_line + word
bbox = draw.textbbox((0, 0), test_line, font=font)
line_width = bbox[2] - bbox[0]
if line_width <= max_width and len(lines) < 3:
current_line = test_line
else:
lines.append(current_line)
current_line = word
lines.append(current_line)
lines = lines[:3] # 最多显示3行文字
# 计算文字总高度
line_height = font.size + 15
total_height = len(lines) * line_height
# 文字垂直居中
start_y = (height - total_height) // 2
# 逐行绘制文字
text_color = (51, 51, 51) # 深灰色,清晰不刺眼
for i, line in enumerate(lines):
bbox = draw.textbbox((0, 0), line, font=font)
line_width = bbox[2] - bbox[0]
x = (width - line_width) // 2
y = start_y + i * line_height
# 绘制文字阴影,更有立体感
draw.text((x+2, y+2), line, font=font, fill=(0, 0, 0, 100))
# 绘制主文字
draw.text((x, y), line, font=font, fill=text_color)
# 保存图片
if save_path:
img.save(save_path, format='PNG', quality=95)
print(f"图片已保存到:{save_path}")
return save_path
else:
# 返回二进制数据,方便上传或者进一步处理
img_byte_arr = BytesIO()
img.save(img_byte_arr, format='PNG', quality=95)
return img_byte_arr.getvalue()
# 测试使用
if __name__ == "__main__":
# 示例:生成一张带文字的图片
text = "Python自动生成图片教程\n零基础也能学会"
generate_image_with_text(text, save_path="test_cover.png")
print("生成完成!")
步骤4:使用方法
直接运行代码,就会在当前目录生成一张test_cover.png的图片,效果和我们文章的封面一模一样。
如果需要批量生成,只需要循环调用函数即可:
# 批量生成示例
titles = [
"Python入门教程",
"数据分析实战",
"自动化办公技巧",
"爬虫开发指南"
]
for i, title in enumerate(titles):
generate_image_with_text(title, save_path=f"cover_{i+1}.png")
步骤5:常见问题解决
- 字体加载失败:检查字体路径是否正确,或者安装文泉驿微米黑字体
- 中文显示乱码:确认使用的是支持中文的字体,不要用默认的英文字体
- 文字超出图片范围:减小字体大小,或者增加图片宽度/高度
- 背景颜色不好看:自己修改
GRADIENTS里的配色,RGB值可以用取色器去取喜欢的颜色
三、扩展功能和变现思路
学会了这个技能,你可以用来做很多变现的事情:
1. 批量生成封面图:给自媒体博主批量做文章封面、视频封面,一张收费5-10元,量大可以优惠
2. 定制海报生成工具:做一个小工具,用户输入文字自动生成海报,按次收费或者会员制
3. 批量生成宣传图:给电商商家批量生成商品主图、活动海报,按项目收费
4. 课程教学:把这个技能做成教程卖给新手,一单收费几十到几百不等
这个技术非常实用,而且代码量小,容易学会,新手也能快速上手接单。
四、干货科普
- 进阶技巧:可以添加logo、二维码、装饰元素等,让图片更美观
- 性能优化:批量生成的时候可以用多进程,速度提升好几倍
- 字体商用注意:如果是商业使用,一定要用免费商用的字体,避免版权纠纷
- 批量生成技巧:可以结合Excel批量读取标题,自动生成几百张图片,效率极高
五、避坑指南
⚠️ 重要提醒:这些都是我踩过的坑,一定要注意。
1. 版权问题:字体和素材一定要用免费商用的,否则会被起诉索赔,得不偿失
2. 画质问题:保存的时候用PNG格式,quality设置95以上,不要用JPG,容易模糊
3. 批量生成的时候:一定要加异常处理,避免某一张失败导致整个任务中断
4. 文字排版:不要把文字放得太靠边,四周留足够的边距,否则裁切的时候会被剪掉
最后总结
用Python自动生成图片其实非常简单,核心就是Pillow库的使用,只要把上面的源码复制下来,稍微改改就能满足大部分需求。
不管是自己用还是用来接单赚钱,这个技能都非常实用,花半小时学会,能省很多时间和钱。
如果在使用过程中遇到问题,欢迎在评论区留言,我会一一解答。