首页
Search
1
解决 docker run 报错 oci runtime error
49,608 阅读
2
WebStorm2025最新激活码
28,204 阅读
3
互点群、互助群、微信互助群
23,060 阅读
4
常用正则表达式
21,664 阅读
5
罗技鼠标logic g102驱动程序lghub_installer百度云下载windows LIGHTSYNC
20,037 阅读
自习室
互通有无
搞钱日记
养生记
包罗万象
Search
标签搜索
职场副业
职业发展
副业赚钱
后端开发
内容创作
微服务
分布式系统
效率提升
DevOps
技能提升
流量变现
性能优化
云原生
高并发
编程学习
深度学习
人工智能
架构设计
机器学习
前端开发
loong
累计撰写
3,206
篇文章
累计收到
4
条评论
首页
栏目
自习室
互通有无
搞钱日记
养生记
包罗万象
页面
搜索到
1
篇与
的结果
2026-05-29
用Python和Pillow批量生成社交媒体图片:从模板设计到一键导出的实战指南
直接上干货,不啰嗦。很多人做公众号封面、小红书笔记图、朋友圈海报、活动宣传图时,最痛苦的不是设计一张图,而是改几十张图。标题要换,副标题要换,日期要换,背景色可能也要换。手动用设计工具一张张导出,刚开始还能忍,做到第20张基本就想关电脑。这篇文章就手把手教你用Python自动化批量生成社交媒体图片,核心工具是Pillow。小白也能轻松搞定,只要你会运行Python脚本,就能做出一套自己的批量出图流程。适合用Pillow做什么?先别把它想得太万能Pillow很适合做这类固定模板图片:每日金句海报公众号文章封面小红书标题卡片电商活动促销图课程宣传长图的局部模块批量生成带姓名、二维码、编号的邀请函简单来说,只要图片结构比较固定,文字和图片素材经常变化,就很适合自动化。但我也先说清楚:如果你想做特别复杂的排版,比如大量自由形状、复杂图层混合、高级字体特效,Pillow不是最舒服的选择。它的优势是稳定、轻量、可控,适合批量生产,不是替代所有设计软件。快速方案:一张模板图 + 一份数据表 + 一个Python脚本我常用的流程很简单:先设计一张背景模板图,比如 template.png准备一份数据,比如 data.csvPython读取数据Pillow把标题、副标题、日期写到模板上自动导出多张图片目录可以这样放:poster_project/ template.png data.csv fonts/ SourceHanSansSC-Bold.otf SourceHanSansSC-Regular.otf output/ make_posters.py这里有个技巧:字体文件一定要自己放到项目里,不要完全依赖系统字体。因为你在自己电脑上能跑,不代表换一台电脑还能正常显示中文。安装Pillow,先把环境跑通如果你已经装好Python,直接执行:pip install pillow如果你还要读取CSV,Python自带csv模块就够了,不需要额外安装。接着往下看,我们先做一个最小可用版本。准备数据:别一上来就搞复杂data.csv可以这样写:title,subtitle,date 如何提高内容生产效率,用Python批量生成封面图,第01期 3个适合新手的自动化脚本,少做重复劳动,第02期 Pillow实战入门,从文字排版到图片导出,第03期新手最容易踩的坑是CSV编码。建议保存为UTF-8。如果你用Excel编辑后中文乱码,可以试试用WPS、Numbers,或者用代码读取时指定 utf-8-sig。核心代码:批量生成社交媒体图片下面这段代码是简化版,但已经能完成真实工作。你可以直接复制,然后改路径、坐标和字号。from PIL import Image, ImageDraw, ImageFont import csv import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) TEMPLATE = os.path.join(BASE_DIR, 'template.png') DATA = os.path.join(BASE_DIR, 'data.csv') OUT_DIR = os.path.join(BASE_DIR, 'output') FONT_BOLD = os.path.join(BASE_DIR, 'fonts/SourceHanSansSC-Bold.otf') FONT_REGULAR = os.path.join(BASE_DIR, 'fonts/SourceHanSansSC-Regular.otf') os.makedirs(OUT_DIR, exist_ok=True) def draw_text(draw, text, position, font_path, size, fill): font = ImageFont.truetype(font_path, size) draw.text(position, text, font=font, fill=fill) def make_image(row, index): img = Image.open(TEMPLATE).convert('RGB') draw = ImageDraw.Draw(img) draw_text(draw, row['title'], (90, 180), FONT_BOLD, 58, (30, 30, 30)) draw_text(draw, row['subtitle'], (90, 280), FONT_REGULAR, 32, (90, 90, 90)) draw_text(draw, row['date'], (90, 620), FONT_REGULAR, 26, (120, 120, 120)) filename = f'poster_{index:03d}.jpg' img.save(os.path.join(OUT_DIR, filename), quality=95) with open(DATA, 'r', encoding='utf-8-sig') as f: reader = csv.DictReader(f) for i, row in enumerate(reader, start=1): make_image(row, i) print('生成完成')做好了这一步,你已经拥有一个基础版的Python批量出图工具。重点是这个:文字太长怎么办?真实场景里,标题不可能都一样长。短标题好看,长标题直接冲出画布,这也是Pillow批量生成图片最常见的问题。解决办法是自动换行。def wrap_text(text, font, max_width): lines = [] current = '' for char in text: test = current + char box = font.getbbox(test) width = box[2] - box[0] if width <= max_width: current = test else: lines.append(current) current = char if current: lines.append(current) return lines def draw_wrapped_text(draw, text, x, y, font_path, size, fill, max_width, line_gap): font = ImageFont.truetype(font_path, size) lines = wrap_text(text, font, max_width) for line in lines: draw.text((x, y), line, font=font, fill=fill) y += size + line_gap然后把标题绘制改成:draw_wrapped_text(draw, row['title'], 90, 170, FONT_BOLD, 54, (30, 30, 30), 850, 12)这个方法亲测有效,尤其适合中文标题。英文会涉及单词拆分,处理方式略有不同,可以按空格分词再拼接。图片尺寸怎么选?别随便设不同平台常用尺寸不一样。你不需要记一堆标准,但至少要知道自己的目标场景。常见选择:公众号封面:常用横图比例,注意移动端裁切小红书封面:常见为竖图,比如3:4或4:5-朋友圈海报:方图和竖图都常见短视频封面:通常按平台推荐比例准备我的建议是:先确定一个主平台,再围绕它设计模板。不要一套图硬适配所有平台,最后往往哪里都不舒服。想让图片更像设计稿,可以加这些小细节Pillow不是只能写字。你还可以做很多实用效果:添加半透明色块overlay = Image.new('RGBA', img.size, (255, 255, 255, 0)) od = ImageDraw.Draw(overlay) od.rounded_rectangle((60, 130, 1020, 520), radius=30, fill=(255, 255, 255, 210)) img = Image.alpha_composite(img.convert('RGBA'), overlay).convert('RGB')添加头像或产品图avatar = Image.open('avatar.png').convert('RGBA').resize((120, 120)) img.paste(avatar, (820, 560), avatar)导出高清图如果要发社交媒体,建议模板一开始就按目标尺寸或2倍尺寸设计。不要先做小图再强行放大,画质会糊。新手最容易踩的5个坑1. 中文字体显示成方块原因通常是字体不支持中文,或者字体路径写错。解决办法是把中文字体文件放进fonts目录,并用绝对路径加载。2. 坐标调半天还是不准Pillow的坐标从左上角开始,x向右,y向下。建议先在模板上画参考线,或者临时用矩形框标出文字区域。3. 图片导出后颜色变了不同工具、不同色彩配置会有差异。社交媒体日常发布一般用RGB就够了,保存前统一 convert('RGB')。4. 文件名重复被覆盖批量生成时一定要加编号,或者用标题生成文件名。标题做文件名时要过滤特殊字符。5. 模板改了,代码坐标全废这个很正常。我的做法是把坐标集中放到配置区,不要散落在代码各处。后期维护会轻松很多。一个更好维护的写法:把样式集中管理当模板越来越多,建议这样写:STYLE = { 'title': {'pos': (90, 170), 'size': 54, 'color': (30, 30, 30), 'max_width': 850}, 'subtitle': {'pos': (90, 330), 'size': 32, 'color': (90, 90, 90)}, 'date': {'pos': (90, 620), 'size': 26, 'color': (120, 120, 120)} }这样设计改版时,你不用到处找坐标。说实话,脚本能不能长期用,很多时候不取决于代码多高级,而取决于它好不好改。FAQ:几个常见问题Pillow适合完全没有Python基础的人吗?适合入门,但最好先会运行脚本、安装库、修改文件路径。不会也没关系,跟着做就行,先跑通一个案例,比看十篇语法教程更有感觉。可以批量生成带二维码的海报吗?可以。二维码可以提前生成成PNG,再用 paste 贴到指定位置。如果想全自动生成二维码,可以配合 qrcode 这个库。能不能用Excel当数据源?可以,但我更建议初期用CSV。CSV简单、透明、少踩坑。等流程稳定后,再用 openpyxl 读取Excel。生成PNG还是JPG?如果有透明背景,用PNG。如果是普通社交媒体图,用JPG就够了,文件更小。封面、海报这类图片,我通常用JPG并设置 quality=95。结尾:先做一个能用的版本,再慢慢优化用Python自动化批量生成社交媒体图片,核心不是写出多复杂的代码,而是把重复劳动交给脚本。我的建议很简单:先做一张模板,跑通标题、副标题、日期这三个字段。确认能稳定导出后,再加自动换行、头像、二维码、不同尺寸、多模板切换。别一开始就追求完美。能用,稳定,好改,这三个标准比花哨更重要。如果你现在正被批量改图折磨,今天就建个文件夹,放一张模板,写一份CSV,把上面的代码跑起来。跑通的那一刻,你会明显感觉:重复劳动终于少了一大块。
2026年05月29日
21 阅读
0 评论
0 点赞