这篇适合谁,读完能做到什么
适合需要一组看起来像同一系列的插图,并且想要一条能反复使用的路径、从文字提示走到小体积网络图片的人。读完你应该能维护自己的提示词文件,用 sips 和 cwebp 做转换,用苹果的 Vision 框架写一个查图中文字的小程序,并明白上传顺序为什么重要。
这条流水线是什么
我们的流程有五步:提示词文件、生成图片、缩放并转为 WebP、检查文字、上传。其中检查文字是不常见的一步。提示词里已经禁止出现文字,但模型仍可能在图里写出字母。我们用一个基于苹果 Vision 框架的小型 Swift 程序检查每张图,有字的图会被重新绘制。[1]Vision 的文字识别请求 VNRecognizeTextRequest 文档中的说明是「在图像中查找并识别文字的图像分析请求」,可用于 macOS 10.15 及以上,以及 iOS 13.0。[2]
转 WebP 这一步是因为原图太大。2026 年 11 月 13 日,约 1.8 MB 的 PNG 文件被转成了 36 到 49 KB 的 WebP 文件。[1]WebP 是面向网络的图片格式,同时提供无损和有损压缩。官方说明中,无损 WebP 比 PNG 小 26%,有损 WebP 在同等 SSIM 质量指标下比可比的 JPEG 小 25-34%。[14]
准备
需要 cwebp 编码器。libwebp 软件包包含库以及命令行工具 cwebp 和 dwebp;Linux、Windows 或 macOS 上也可以下载预编译好的 cwebp。[18][14]缩放用的是 sips。
Vision 是苹果的框架。我们使用的 VNRecognizeTextRequest 通过 VNImageRequestHandler 运行,后者负责处理针对同一张图片的一个或多个请求。[11]
上手步骤
- 把每个事件的画面描述写进
content/media/prompts.json,每个事件一个对象,包含subject、alt_en、alt_zh和source字段。[1]
- 给每条提示词都加上同一段风格串。这是封面看起来像一个系列的原因。风格串是 "conceptual 3D render, soft studio lighting, matte materials, dark navy background with cool cyan rim light, minimal composition, shallow depth of field"。[1]
- 加上禁止项:提示词禁止出现文字、字母、数字、商标、人脸和旗帜。[1]
- 按提示生成图片,然后用
sips -z 720 1280缩放到 720×1280,再用cwebp -quiet -q 80转换。[1]cwebp 手册给出的示例调用如下,可以看出选项的写法:[13]
cwebp -q 50 -lossless picture.png -o picture_lossless.webp
cwebp -q 70 picture_with_alpha.png -o picture_with_alpha.webp
cwebp -sns 70 -f 50 -size 60000 picture.png -o picture.webp
cwebp -o picture.webp -- ---picture.png- 检查图里有没有字。写一个小型 Swift 程序,对每张图运行
VNRecognizeTextRequest。几个属性决定检查的方式:recognitionLevel设为VNRequestTextRecognitionLevel.fast时优先速度,设为VNRequestTextRecognitionLevel.accurate则用于更长、计算量更大的识别。[3]usesLanguageCorrection为true时会做语言纠错;设为false则返回原始结果,速度更快,但准确性更低。[4]minimumTextHeight相对于图片高度计算,默认值是0.03125,即 1/32。[5]
- 先把图片上传到对象存储,再登记到生产数据库。[1]
- 选出需要配图的条目。只为重要度 4 及以上、还没有封面的新闻事件配图,每次导入后用一条数据库查询找出它们。[1]
我们的做法
我们只给需要封面的事件配图。查询在每次导入之后运行,所以列表总是最新的。[1]所有提示词使用同一段风格串,正是这一点让封面看起来像一个系列。[1]到 2026 年 11 月 13 日,媒体库里有 642 张 AI 生成图和 25 张照片。[1]
我们先上传,再登记。2026 年 11 月 8 日,顺序曾经反过来,线上网站有一段时间显示破图。从那以后,图片先进对象存储,数据库记录后写入。[1]
我们选的尺寸是 720×1280,输出为质量 80 的 WebP,就是上面那两条命令的结果。[1]这些是我们网站的选择,不是对所有配图的通用标准。
限制和常见问题
usesLanguageCorrection为false时,customWords会被忽略。开启纠错时,customWords优先于标准词典。[8]automaticallyDetectsLanguage在 iOS 16.0、iPadOS 16.0、macOS 13.0、tvOS 16.0 和 visionOS 1.0 上可用,用于决定是否检测语言,以便使用合适的识别模型。[7]recognitionLanguages接受 ISO 语言代码,顺序即优先级。[6]supportedRecognitionLanguages()返回请求支持的语言标识符。[9]- 小于
minimumTextHeight的文字会被忽略。调大这个值可以减少内存占用、加快识别,代价是漏掉小字。[5] perform(_:)在所有请求完成或失败后才返回,所以要逐个检查每个请求的成功或失败。[12]- WebP 的最大尺寸是 16383 x 16383 像素。[15]有损 WebP 只处理 8 位 Y'CbCr 4:2:0 图像,无损 WebP 只处理 RGBA。[15]
- 从有损源转换后,如果文件大小一直超出预期,就降低质量。FAQ 还建议用
-size指定目标大小来代替质量设置,并写道「targeting 80% of the original file size might prove more robust」。[15] - cwebp 不支持动画 PNG 或动画 WebP 作为输入。[13]
-preset应放在参数的最前面,因为它会覆盖其他参数的值,只有-q例外。[13]- Vision 只负责读文字,判断一张图是不是好的配图仍然要靠人。
下一步
先读 Vision 的 VNRecognizeTextRequest 文档[2]和 cwebp 手册。[13]要了解格式本身,读 WebP 的 FAQ。[15]先用一张图跑通,肉眼看一遍,再让整组图都经过同一个脚本。
来源
- 1
- 2VNRecognizeTextRequestApple Developer Documentation
- 3recognitionLevelApple Developer Documentation
- 4usesLanguageCorrectionApple Developer Documentation
- 5minimumTextHeightApple Developer Documentation
- 6recognitionLanguagesApple Developer Documentation
- 7automaticallyDetectsLanguageApple Developer Documentation
- 8customWordsApple Developer Documentation
- 9supportedRecognitionLanguages()Apple Developer Documentation
- 10VNRecognizedTextObservationApple Developer Documentation
- 11VNImageRequestHandlerApple Developer Documentation
- 12perform(_:)Apple Developer Documentation
- 13cwebpGoogle for Developers
- 14An image format for the WebGoogle for Developers
- 15WebP FAQGoogle for Developers
- 16WebP RIFF Container SpecificationGoogle for Developers
- 17WebP API DocumentationGoogle for Developers
- 18libwebp READMEwebmproject/libwebp
引用本页: 批量 AI 配图:生成、缩放、查字. TellWorld, https://www.tellworld.net/zh/practice/practice-ai-image-batch. 更新于 2026-11-14