每次写完文章,最痛苦的不是写——是做封面。
找图、裁剪、调色、加文字、导出——一套流程至少 30 分钟。设计师报价一张封面 200 块。我不是出不起这个钱,是我一周一篇,一个月 800 块,一年小一万。作为一个还在冷启动期的副业号,这个成本不合理。
于是我开始让 AI 帮我做封面。三个月了,现在做一张封面平均3 分钟。
这篇文章把我的流程全部公开——包括 Prompt、代码、以及对比数据。
我的封面生成流程
写完文章 → 提取核心概念,生成图片 Prompt → AI 生成图片(DALL-E / Midjourney / 本地 SD) → 加文字叠层(品牌色 #E85A3A) → 导出 3 个尺寸(公众号 / B站 / 抖音) → 完核心就三步:Prompt → 生图 → 叠字。我写了一个 Go 工具串起全流程。
第一步:从文章标题生成图片 Prompt
不能让 AI 直接「做一个封面」,那样出来的图千篇一律。正确做法是先让 LLM 把文章主题翻译成视觉描述:
funcgenerateImagePrompt(articleTitle,abstractstring)(string,error){systemPrompt:=`你是视觉设计师。根据文章标题和摘要,生成一个用于 AI 图片生成的 Prompt。 要求: 1. 描述具体的视觉元素,不要抽象概念 2. 指定风格(扁平/3D/极简/复古/科技感) 3. 指定色调(与 #E85A3A 龙虾橘红协调) 4. 不要包含任何文字(文字我会后期叠加) 5. 英文输出,50 词以内 6. 结尾加上 --ar 16:9`userPrompt:=fmt.Sprintf("标题:%s\n摘要:%s",articleTitle,abstract)returncallLLM(systemPrompt,userPrompt)}实测案例——我这篇《多模态模型入门》的 Prompt:
A futuristic digital interface showing a split screen -- left side is a code screenshot, right side is the same code but with AI-generated analysis annotations floating around it. Style: clean tech illustration, glowy accents, minimal. Color palette: deep navy #1F3A5F background, coral orange #E85A3A highlights. No text in the image. --ar 16:9第二步:调 AI 图片生成 API
DALL-E 3 有 API,可以直接用 Go 调:
import("bytes""encoding/json""fmt""net/http""os")typeDalleRequeststruct{Modelstring`json:"model"`Promptstring`json:"prompt"`Nint`json:"n"`Sizestring`json:"size"`}typeDalleResponsestruct{Data[]struct{URLstring`json:"url"`B64JSONstring`json:"b64_json"`}`json:"data"`}funcgenerateCover(promptstring)(string,error){apiKey:=os.Getenv("OPENAI_API_KEY")req:=DalleRequest{Model:"dall-e-3",Prompt:prompt,N:1,Size:"1792x1024",}body,_:=json.Marshal(req)httpReq,_:=http.NewRequest("POST","https://api.openai.com/v1/images/generations",bytes.NewReader(body),)httpReq.Header.Set("Authorization","Bearer "+apiKey)httpReq.Header.Set("Content-Type","application/json")resp,err:=http.DefaultClient.Do(httpReq)iferr!=nil{return"",err}deferresp.Body.Close()varresult DalleResponse json.NewDecoder(resp.Body).Decode(&result)iflen(result.Data)>0{returnresult.Data[0].URL,nil}return"",fmt.Errorf("未生成图片")}跑一次大概 6-8 秒,生成的图片 URL 可以直接下载。
第三步:叠文字——用 Go 图片库加标题
Go 的标准库没有图片处理能力,我用github.com/fogleman/gg库在图片上叠文字:
import("github.com/fogleman/gg""github.com/nfnt/resize""image""net/http")funcaddTextOverlay(imageURL,title,subtitlestring)(image.Image,error){// 下载原图resp,_:=http.Get(imageURL)deferresp.Body.Close()img,_,_:=image.Decode(resp.Body)// 缩放到 1920x1080img=resize.Resize(1920,1080,img,resize.Lanczos3)dc:=gg.NewContext(1920,1080)// 把原图画上去dc.DrawImage(img,0,0)// 底部半透明遮罩dc.SetRGBA(0,0,0,0.5)dc.DrawRectangle(0,720,1920,360)dc.Fill()// 加载中文字体iferr:=dc.LoadFontFace("fonts/NotoSansSC-Bold.ttf",52);err!=nil{returnnil,fmt.Errorf("加载字体失败: %w",err)}// 标题——品牌主色dc.SetHexColor("#FFFFFF")dc.DrawStringWrapped(title,// 文章标题80,780,// x, y 起点0,0,// ax, ay1760,// 最大宽度1.5,// 行间距gg.AlignLeft,)// 副标题 / 标签dc.LoadFontFace("fonts/NotoSansSC-Regular.ttf",28)dc.SetHexColor("#E85A3A")dc.DrawStringAnchored(subtitle,80,970,0,0)returndc.Image(),nil}最终输出三张图——公众号(900x383)、B站(1280x720)、抖音(1920x1080),全部从同一张原图裁剪。
成本和时间对比
| 方案 | 时间/张 | 成本/张 | 一个月(4 张) |
|---|---|---|---|
| 找设计师 | 等 1-3 天 | ¥200 | ¥800 |
| 自己手做(Canva/PS) | 30-40 min | 0 | 2-3 小时 |
| AI 生成 + Go 叠字 | 2-3 min | ¥0.15-0.60 | ¥2 + 12 分钟 |
DALL-E 3 一张图约 ¥0.30(按图片分辨率计费)。Midjourney 月费 $30 无限生成。本地 SD 零成本但需要显卡。
我现在用的是DALL-E 3 + Midjourney 混合:技术类文章用 DALL-E(精准),思考类用 Midjourney(好看)。
我的 Prompt 模板库(直接抄)
经过三个月调试,积累了这几个高复用率的模板:
技术教程类:
Clean tech illustration, [topic] visual metaphor, dark navy background with coral orange accents, minimal geometric shapes, no text, 16:9工具测评类:
Side-by-side comparison visual, [tool A] vs [tool B], split screen, modern flat design, neutral gray background with accent colors, no text, 16:9副业方法论类:
Abstract visualization of [concept], warm tone paper texture background (#F7F2EA), hand-drawn style arrows and icons in navy blue, personal notebook aesthetic, no text, 16:9一个你可能没想到的用途
封面图上没有文字的时候,你可以同一张图用 100 遍——不同文章叠不同标题。一张高质量底图可以做成系列模版。
我的「工具链合集」系列所有文章用同一张底图,只换文字。视觉效果统一,品牌感强,每篇只花 30 秒——改个标题搞定。
AI 生成封面的真正价值不是省了设计费,而是把封面做成可复用的资产。
踩过的坑
- AI 不听「别放文字」——部分模型会无视这条,在画面里塞乱码。解决:Prompt 加一句「absolutely no text in the image」并降低 creativity 参数。
- 中文标题叠在复杂背景上读不清——解决:加半透明遮罩层,跟 YouTube 缩略图学的。
- AI 生成的人脸看起来很恐怖——解决:不要让 AI 画人。用抽象图形、代码元素、几何图案。
下一篇做一件狠事:同一个 Prompt 丢给 DALL-E、Midjourney、Stable Diffusion,看谁的图最好、谁最便宜。真实数据,不是玄学。