发完第一篇微信公众号文章,下一个问题来了:封面图。
微信公众号封面图有个讨厌的地方——它要同时满足两种显示场景。大图模式下是 2.35:1 的宽幅横图,小图模式下微信会自动从中间截一个方形缩略图。一张图,两个比例,都得好看。
要解决这个问题,最好的方案是一次性生成一张图片,同时能够兼容这两种尺寸的封面。然后上传到公众号后台,进行精准选取。如下图所示:
市面上有模板网站,但每次手动改文字、调布局,挺烦的。我是搞技术的,能自动化的事情为什么要手动?
于是花了一个小时,和AI一起磨了一个封面图生成器出来。过程比预想的曲折,但踩的坑挺有代表性,记下来。
第一版:让AI直接画,翻车
最开始的想法很简单——把尺寸和布局要求写进 prompt,让 gpt-image-2 直接生成一张 1280×383 的完整封面图,可以兼容长图和方图,包含背景、文字、装饰元素。
结果出来两张图就放弃了。第一张,尺寸完全不对,API 返回的是 1624×969,不是我要的 1280×383。查了一下才知道,gpt-image-2 只支持几种固定尺寸(1024×1024、1792×1024 等),1280×383 不在列表里。第二张,文字渲染虽然还行,但左右分区布局完全不听指挥,AI 理解「左70%放标题、右30%放关键词」的方式和我预想的不是一回事。
这个阶段最大的教训:AI 图像模型对精确的像素级布局控制是无能为力的。它理解「科技感」「渐变」「蓝色」这种风格词很准,但说「x坐标0到900放标题」它做不到。
第二版:AI画背景,Pillow叠文字
既然 AI 控制不了精确布局,那就换个分工方式。AI 负责画纯视觉背景(prompt 里明确说"No text"),然后用 Python 的 Pillow 库做精确裁剪和文字排版。
具体流程三步走:
- gpt-image-2 生成一张大图(1792×1024),只有背景没有文字
- Pillow 居中裁剪到 1280×383,尺寸零误差
- Pillow 用微软雅黑字体渲染中文文字,左右分区精确定位
这一版尺寸问题解决了,文字也清晰了。但新问题来了:右侧区域的设计太简陋。一开始用了半透明白色圆角卡片,里面就放一行关键词和日期,看起来空荡荡的。去掉白卡片,换成同心圆环装饰加蓝色下划线,稍微好一点,但跟左侧 AI 生成的丰富背景一比,Pillow 排版的文字和装饰元素显得太「程序员」了,没有设计感。
而且去掉了 AI 生成的文字后,背景里 AI 原本能渲染的那种带光效、带层次的标题效果也没了,等于丢掉了 AI 的优势。
第三版:AI全包,Pillow只裁剪
做到这里我突然想明白一件事:我之前说「AI做不到布局控制」,说得太绝对了。
AI 做不到的是像素级精确(「在第324个像素放一个直径48像素的圆」),但「左侧放标题、右侧放关键词」这种区域级布局指令,它是能理解的。真正搞不定的是两个东西:一是 API 不支持自定义尺寸(这是接口限制),二是 AI 渲染中文偶尔会乱码(这是模型短板)。
但实际试下来,gpt-image-2 渲染中文的效果比预想的好很多,大部分情况下文字清晰准确。
于是最终方案变成了:
- gpt-image-2 全权负责设计 — 把背景风格、左右分区布局、中文标题/副标题/关键词全部写进 prompt,AI 一次性生成完整封面
- Pillow 只做一件事 — 居中裁剪到精确 1280×383
这样 AI 负责所有视觉创意(背景、文字、装饰元素、色彩搭配),Pillow 只做它最擅长的精确裁剪。各自的活儿都对路了。
还有一个裁剪问题
方案定下来后还踩了最后一个坑。
API 返回的是 1792×1024 的图,宽高比约 1.75:1,但我要的是 1280×383,宽高比 3.34:1。这意味着要从一张偏方的图里裁出一条很窄的横条,上下要砍掉一大半。
一开始用居中裁剪,结果右侧的圆形装饰元素被截掉了一部分——AI 把内容画得稍微偏了一点,刚好被裁到了。
试过用图像分析自动找内容密集区域来裁剪,效果更差——因为 AI 生成的背景本身纹理很丰富,方差检测法根本分不清「哪里是重点内容」。
最终解法还是在 prompt 上下功夫。不是描述「居中」,而是用更具体的意象告诉 AI:
「把所有内容压缩到画布正中央的窄水平条带内。想象最终图只有画布高度的38%,上下都会被裁掉。设计成画布中间的一条宽缎带。」
加上这条之后,AI 把内容收拢了,居中裁剪基本不会切到关键元素。
最终效果
现在的流程是:我输入结构化文案(主标题、副标题、右侧关键词、视觉风格),脚本根据标题关键词自动判断主题(科技/商务/通用),生成匹配的 prompt,调 API 出图,裁剪保存。整个过程大概30秒。
封面图同时满足大图(2.35:1)和小图(1:1自动截取)两种场景,左右分区、视觉连贯、中文清晰。
公众号后台预览效果
本篇文章的封面现做现用使用这个wechat-cover skill生成效果如下:
回头看这件事,有两个判断
第一,和AI协作的核心是分清它能干什么、不能干什么。
AI 图像模型擅长风格、色彩、整体视觉创意,不擅长像素级精确控制。硬要它做做不到的事,只会互相折磨。把精确控制交给代码(Pillow裁剪),把创意设计交给AI(整体视觉),效率最高。
第二,prompt不是写一次就完的。
每一版翻车后,不是换一个 prompt 重来,而是搞清楚翻车的原因:是尺寸问题(API限制)、是布局问题(AI的边界)、还是裁剪问题(prompt描述不够具体)。搞清楚原因,才能精确调整。
这个过程跟技术落地的思路一样:先跑通,再优化,每次只改一个变量。
我把这个封面图生成器【wechat-cover】整理成了一个 Claude Code Skill,放到了 GitHub 上,配置好环境变量就能用:github.com/kantorgong/…
如果你也在用 Claude Code等AI Agent,或者对公众号封面的自动化有想法,欢迎试试,也欢迎提 issue 改进。