📎 篇内资产:本篇核心脚本直接内嵌在第 6 节,复制存为 batch_images.py 即可运行,不依赖任何工具的付费档;提示词模板在第 4、5 节,一键复制就能用。 English: the core Pillow script is embedded in Section 6 — copy it into batch_images.py and run. Prompt templates live in Sections 4 & 5, ready to copy.

【图像办公】AI 图像办公:海报、封面与批量图片处理

一、痛点引入:你是不是也这样

如果你是运营、行政,或者在经营自己的账号,这些场景你八成撞过:

  • 公众号要发推文,封面图没着落——找设计师要排队,买模板网站要充会员,改一张图等半天;
  • 部门办活动,要一张海报,需求描述了三遍还是不对味,deadline 前夜只能自己上;
  • 节日热点一个接一个,每逢佳节配图忙,张张都要现想现做;
  • 活动拍了一百张照片,要统一加水印、压缩、改成同一尺寸——纯手工一张张点,一下午就没了。

前三个是"从零做一张图"的创意活,第四个是"对一堆图做同样操作"的体力活。这两类活恰好各有一位对口的帮手:创意活交给 AI 文生图(你用大白话描述,它出图);体力活交给一段小脚本(规则固定,代码最擅长)。

这篇就把两条线一次跑通:单张海报做得快,一百张图也不慌。

二、学完这篇你能做出什么(目标产出)

  1. 一张 AI 生成的活动海报:用"主体 + 风格 + 文字位"三要素提示词生成,可下载后二次编辑;
  2. 一套公众号封面提示词模板:风格词固定,每次只换主题词,5 分钟出一张,风格还统一;
  3. 一个双击就跑的批量处理脚本:加水印、压缩、统一尺寸三合一,一百张图跑一遍命令的功夫。

三、开搞前的准备:选型 + 合规 + 环境

3.1 文生图工具怎么选(国内为主)

中文办公场景,优先用国内工具——中文理解好、国内访问稳、生态打通:

工具 特点 适合
即梦(字节跳动) 中文语境理解好,出图速度快,与剪映/豆包生态打通,支持参考图改图 快速出封面、海报、公众号配图
通义万相(阿里) 风格选择多,背靠阿里云,提供 API(批量生图可程序化) 风格探索多、后续想接脚本批量生图的进阶用户
DALL·E(OpenAI) 海外工具,一句带过供对照:中文语境与国内可用性均不如上面两家,本文以国内工具为主 已有海外工具账号者的对照选项

选型建议:先用即梦跑通本篇全部案例(免费额度即可体验,额度以官方页面为准),想深挖再试通义万相。

商用授权,逐家核对:AI 生成图能否商用、是否需要标注"AI 生成",各家政策不同且一直在调整。本文不替任何一家下结论——商用前请以即梦、通义万相(及 DALL·E)当时的官方会员协议与生成协议为准,逐家查证后再用。

3.2 装好批量处理的环境(Python + Pillow)

Python 安装在 B25《批量处理 Excel》第 4 节已手把手教过(记得勾 Add Python to PATH),这里只补装图像库一条命令:

bash
pip install pillow

Pillow 是 Python 最常用的图像处理库,加水印、压缩、改尺寸这些"规矩活"全靠它。

四、案例实战(一):单张海报——提示词写"主体 + 风格 + 文字位"

新手用文生图最常见的失败,是只写一句"帮我画一张读书会海报"——AI 只能自由发挥,十有八九不对味。把提示词拆成三要素,成功率立刻上一个台阶:

三要素模板:主体(画什么)+ 风格(什么画风/配色/构图)+ 文字位(哪里留白、留给谁写字)

模板 A:活动海报(竖版)

text
一张"社区读书会"活动海报,主体:一本打开的书,上方漂浮着暖黄色灯泡与星空; 风格:清新文艺插画,米白底色,暖黄主色调,构图大量留白; 文字位:画面下三分之一整体留白,用于后期叠加活动名称、时间、地点,不要在图中生成任何文字; 竖版,比例 3:4

模板 B:公众号封面(横版 2.35:1)

text
一张公众号封面插图,主体:一只戴眼镜的橘猫坐在堆满文件的书桌上,一脸无奈; 风格:扁平插画风,蓝橙撞色,画面简洁、留白多; 文字位:画面上方留出一条横向空白带,用于后期叠加标题文字,图中不要出现任何文字; 比例 2.35:1

模板 C:节日配图(方形)

text
一张中秋节贺图,主体:玉兔望向圆月,周围有祥云与桂花枝; 风格:国潮插画,深蓝底色配金色点缀,对称构图; 文字位:画面中央上方预留一块圆形留白区,用于后期叠加"中秋快乐"字样,图中不要生成文字; 方形 1:1

⚠️ 为什么三个模板都强调"不要生成文字":AI 生成图里的文字极易错乱——笔画糊、错别字、中英文混杂都常见。标题、时间、地点这类重要文字,一律后期叠加(PPT、稿定设计、美图秀秀都行;批量加水印则用第 6 节的脚本)。

生成后挑一张满意的,下载到本地(即梦/通义万相都支持直接导出,部分工具还支持二次编辑再导出)。

五、案例实战(二):公众号封面模板化——固定风格词,只换主题词

账号封面最怕"张张一个画风"。解法是把模板 A 拆成固定段 + 变量段

text
一张公众号封面插图,主体:[每次只换这里]; 风格:扁平插画风,蓝橙撞色,画面简洁、留白多; 文字位:画面上方留出一条横向空白带,用于后期叠加标题,图中不要出现任何文字; 比例 2.35:1

主体词怎么填?套一个傻瓜公式:谁 + 在哪 + 干什么 + 一个情绪点

主题 主体词示例
工作方法 一只橘猫面对三块屏幕同时开会,头顶冒烟
数据汇报 一只柯基对着满屏上升的折线图竖大拇指
节日热点 一只柴犬抱着月饼冲向镜头

固定段保证画风统一(读者一看配色就知道是你),变量段保证内容贴题。攒下自己的"风格词库",封面就从创作变成了填空。

六、案例实战(三):批量处理脚本——水印/压缩/统一尺寸三合一

一百张照片要加水印、压缩、统一成封面尺寸?手工点一下午,脚本 30 秒。把下面的代码完整复制,用记事本保存为 batch_images.py(编码选 UTF-8):

python
# -*- coding: utf-8 -*- # batch_images.py —— 图片批量处理三合一:加水印 / 压缩 / 统一尺寸 # 用法:改好 CONFIG 区 → 命令行 python batch_images.py(或用文末 run.bat 双击跑) # 铁律:跑批前先备份原图!本脚本只读原图、成品另存,但备份习惯不能省。 import os from PIL import Image, ImageOps, ImageDraw, ImageFont # ==================== CONFIG 配置区(新手只改这里) ==================== SRC_DIR = r"C:\Users\你的用户名\Pictures\海报原图" # 原图文件夹 DST_DIR = r"C:\Users\你的用户名\Pictures\海报成品" # 成品文件夹(不存在会自动创建) DRY_RUN = True # True = 演练:只打印前 3 张的处理计划,不动任何文件 DO_WATERMARK = True # 开关①:加文字水印 DO_COMPRESS = True # 开关②:压缩(quality=85,体积小、画质几乎不变) DO_RESIZE = True # 开关③:统一尺寸(等比铺满 + 居中裁剪,不变形) WATERMARK_TEXT = "@你的名字" # 水印内容 WATERMARK_OPACITY = 128 # 透明度 0-255,越大越清楚 FONT_PATH = "C:/Windows/Fonts/msyh.ttc" # Windows 微软雅黑字体 # macOS 用户换成 "/System/Library/Fonts/PingFang.ttc" FONT_SIZE = 36 # 水印字号(像素) JPEG_QUALITY = 85 # 压缩质量 1-95:85 视觉几乎无损、体积约省一半;还要更小就降 75,画质损失自己权衡 TARGET_WIDTH = 1280 # 统一尺寸:宽(公众号封面 2.35:1 可改 1200×510,按需调整) TARGET_HEIGHT = 720 # 统一尺寸:高 # ===================================================================== VALID_EXT = (".jpg", ".jpeg", ".png") # 只处理这三种后缀,其他文件自动跳过 def add_watermark(img): """这段在干嘛:把水印文字画在一张透明"贴纸"上,再叠到图片右下角。""" font = ImageFont.truetype(FONT_PATH, FONT_SIZE) # 中文必须指定系统字体文件,默认字体画不出汉字 probe = Image.new("RGBA", (10, 10)) # 临时小图层,只为量出文字的长宽 w, h = ImageDraw.Draw(probe).textbbox((0, 0), WATERMARK_TEXT, font=font)[2:] layer = Image.new("RGBA", (w + 20, h + 20), (0, 0, 0, 0)) ImageDraw.Draw(layer).text((10, 10), WATERMARK_TEXT, font=font, fill=(255, 255, 255, WATERMARK_OPACITY)) base = img.convert("RGBA") # 转成带透明通道的图才能叠贴纸 x = max(0, base.width - layer.width - 24) # 右下角,留 24 像素边距 y = max(0, base.height - layer.height - 24) base.alpha_composite(layer, (x, y)) return base def main(): """这段在干嘛:主流程——扫文件夹 → 每张图走'统一尺寸 → 加水印 → 压缩保存'流水线。""" os.makedirs(DST_DIR, exist_ok=True) # 跑批前先确认字体文件在不在,免得整批跑到水印那步才报错 if DO_WATERMARK and not os.path.exists(FONT_PATH): print(f"找不到字体文件:{FONT_PATH}") print("Windows 一般是 C:/Windows/Fonts/msyh.ttc;macOS 请改成 /System/Library/Fonts/PingFang.ttc") return # 同名不同后缀的文件(如 cat.jpg 与 cat.png)成品都按主名存 .jpg,会互相覆盖——只保留排在前面的一个 seen, names = set(), [] for f in sorted(f for f in os.listdir(SRC_DIR) if f.lower().endswith(VALID_EXT)): stem = os.path.splitext(f)[0] if stem in seen: print(f"跳过 {f}(与同名文件冲突,成品会互相覆盖)") continue seen.add(stem) names.append(f) print(f"在原图文件夹找到 {len(names)} 张 .jpg/.png") if DRY_RUN: # 先试 3 张:正式跑之前,用演练模式确认路径和开关都设对了 print("【演练模式】只列出前 3 张的处理计划,不写任何文件:") for name in names[:3]: print(f" {name} -> {DST_DIR}\\{os.path.splitext(name)[0]}.jpg") print("计划没问题?把 CONFIG 区 DRY_RUN 改成 False,再正式跑。") return for i, name in enumerate(names, 1): try: # 单张图坏了只跳过这一张,不中断整批 img = Image.open(os.path.join(SRC_DIR, name)) img = ImageOps.exif_transpose(img) # 手机竖拍照片按 EXIF 方向信息自动转正,成品不会横躺 if DO_RESIZE: # ImageOps.fit = 等比缩放到刚好铺满目标框,再居中裁掉多余部分(不拉伸变形); # LANCZOS 是缩小图片时画质最好的重采样算法 img = ImageOps.fit(img, (TARGET_WIDTH, TARGET_HEIGHT), Image.LANCZOS) if DO_WATERMARK: img = add_watermark(img) # PNG 若带透明通道,必须先转 RGB 才能存 JPEG,否则直接报错; # 成品统一 .jpg,体积小,插 Word/PPT 也省事 quality = JPEG_QUALITY if DO_COMPRESS else 95 # 95 ≈ 基本无损 out = os.path.join(DST_DIR, os.path.splitext(name)[0] + ".jpg") img.convert("RGB").save(out, "JPEG", quality=quality, optimize=True) print(f"[{i}/{len(names)}] 完成 {name}") except Exception as e: print(f"跳过 {name}({e})") print(f"全部搞定,成品在:{DST_DIR}") if __name__ == "__main__": main()

双击就跑:再用记事本建一个 run.bat,和脚本放同一个文件夹,以后双击它即可:

bat
@echo off cd /d %~dp0 python batch_images.py pause

正确使用姿势(重要)

  1. 第一次跑,保持 DRY_RUN = True——它只列出前 3 张的处理计划,不写任何文件,用来确认路径、开关没设错;
  2. 确认无误后改成 False 正式跑;跑之前把原图整个文件夹复制一份做备份;
  3. 三个开关(水印/压缩/统一尺寸)按需独立开关,比如只压缩就只留 DO_COMPRESS = True
  4. 压缩的视觉权衡:quality=85 肉眼基本看不出损失、体积约省一半;降到 75 体积更小但开始出现轻微色块——给文字多的图压缩时建议 90 起步;
  5. 原图文件夹里别放同名不同后缀的文件(如 cat.jpgcat.png)——成品统一按主名存成 .jpg,会互相覆盖;脚本遇到会自动跳过后者并给出提示;
  6. 手机拍的竖版照片不用手动转:脚本会按照片的 EXIF 方向信息自动转正,成品不会"横躺"。

七、成品回传办公文档(Word / PPT)

图片做好不等于完事,回传到办公文档才算闭环:

  • Word:「插入 → 图片」,选中成品文件夹里的图即可;报告里多图排版建议先插一个 1×N 表格,把图放进格子里对齐更整齐;
  • PPT:直接把图拖进幻灯片;当全页背景用「右键图片 → 置于底层」,或者「设计 → 设置背景格式 → 图片填充」;
  • 数量大时:几十张图按清单自动插进 PPT/Word 这类活,属于 B 系脚本批量的主场(思路同 B11《Excel 转 PPT》),此处不展开。

八、原理小结:创意给扩散模型,规矩活给脚本

  • 文生图的原理:主流工具用的是"扩散模型"——从一团随机噪点出发,按你的文字描述一步步"去噪",把图"修"出来。人话版:AI 把你的提示词当施工图,从一堆马赛克里一点点雕出画面。所以提示词越具体(三要素!),施工图越准。
  • 批量处理的原理:加水印、压缩、改尺寸全是像素级的规则运算——同样的公式对每张图做一遍,完全不需要 AI。
  • 一句话分工:创意交给扩散模型,规矩活交给脚本。以及一条经验:选对工具,比在错误工具里反复调参重要得多。

九、避坑指南:5 个真实踩坑

  1. AI 图里的文字直接用:十张里八张文字是乱的。重要文字一律后期叠加,提示词里就写好"文字位留白"。
  2. 没查商用授权就发出去:能否商用、是否要标注"AI 生成",逐家以官方政策为准,且政策在变——商用前(尤其给客户交付前)务必回查当期协议。
  3. 拿真人肖像、品牌 logo 喂图:上传参考图生成时,名人脸、明星照、别家 logo 都别喂,侵权风险高——和 A5《安全红线》的合规口径一致。
  4. 不备份直接批量覆盖:脚本参数设错,一百张原图一次报废。先备份,再 DRY_RUN 试 3 张,最后全量跑。
  5. 压缩压过头quality 低于 70 时文字边缘明显发糊、出现色块。带字的成品图用 90+,纯风景照片才敢往 75 压。

十、进阶延展

  • 接 B25《批量处理 Excel》:批量思路完全同源——"遍历文件夹 + 按规则处理 + 另存结果",把处理对象从表格换成图片而已。B31 的脚本读懂了,B25 的也就懂了,反之亦然。
  • 接 E5《小微企业主:AI 当全能助理》:封面(本篇)→ 正文文案(B5/B6 类篇目)→ 配图与排版(本篇第 7 节),串起来就是一条小微内容营销流水线。
  • 专用小工具速览:抠图(即梦/美图秀秀的 AI 抠图一键去背景)、老照片修复(各家的"照片修复"功能,高清+上色)——这两类单点需求用现成功能即可,不必写代码。

十一、CTA(可选)

现在就动手:打开即梦,把第 5 节的封面模板换成你下一条推文的主题,生成一张封面;再把最近一次活动的照片挑 3 张,用第 6 节的脚本以 DRY_RUN 模式跑一遍。单张和批量都亲手摸过,这篇就值回票价了。