下午在 vibe coding 的过程中,突然间的一个思路,在 antigravity 里尝试了下,发现真的可以,所以在这里分享给大家。
起因
最近在用 AntiGravity 写一些文档,为了避免文档的枯燥性,想让 AI 帮我在文章中插入一些生成的配图。因为不想打断写文档的心流,而且 AntiGravity 里面有生图的功能,所以优先考虑了使用编辑器里的自带的生图功能。
但试了几次之后发现一个问题:它只能生成 1:1 的正方形图片。
对于文章封面、视频封面这种需要 16:9 宽屏比例的场景,直接用正方形就会有点尴尬——要么上下留白太多,要么强行裁剪丢失内容。
于是就开始想:有没有什么办法能"骗"AI 生成我想要的比例呢?
思路
既然 AntiGravity 限制了输出尺寸必须是 1:1,那就换个角度想:
让 AI 在正方形的画布里,只在中间画一个 16:9 的内容,上下用纯色填充。
生成完之后,再用脚本把中间那部分裁出来,不就得到 16:9 的图了吗?
就像这样:
┌────────────────────┐
│ 纯色填充区域 │ ← 上边距
├────────────────────┤
│ │
│ 16:9 主内容区域 │ ← 这才是我们要的
│ │
├────────────────────┤
│ 纯色填充区域 │ ← 下边距
└────────────────────┘
试了一下,真的可以!
Before:原始生成的图片,可以看到上下粉色的辅助填充区域
After:经脚本自动裁剪后的最终成品
具体操作
整个流程分两步:
第一步:写对 Prompt
关键是要在 Prompt 里明确告诉 AI:
- 画布是正方形
- 主内容只占中间 16:9 的区域
- 上下用纯色填充
总结了一个 Prompt 模板:
A single 16:9 cinematic illustration placed in the CENTER of a square canvas.
The top and bottom background areas are solid [填充颜色].
The central 16:9 illustration depicts: [场景描述].
Style: [风格关键词]. 4k resolution, high quality, sharp details.
参数说明:
| 参数 | 建议 | 说明 |
|---|---|---|
| 填充颜色 | soft pastel pink (#FADADD) | 用浅色方便后期裁剪时识别边界 |
| 场景描述 | 自由发挥 | 你想画什么就写什么 |
| 风格关键词 | 看个人喜好 | 比如 Flat vector illustration, minimalist line art |
举个例子:
A single 16:9 cinematic illustration placed in the CENTER of a square canvas.
The top and bottom background areas are solid soft pastel pink (#FADADD).
The central 16:9 illustration depicts: A girl sitting on a hill, looking at a sunrise, feeling hopeful.
Style: Flat vector illustration, minimalist continuous line art, healing atmosphere.
4k resolution, high quality, sharp details.
生成出来的图,上下就会有粉色的填充区域,中间是你要的 16:9 内容。
第二步:用脚本裁剪
图片生成后,用下面这个 Python 脚本把中间部分裁出来:
#!/usr/bin/env python3
"""
16:9 裁剪工具
从正方形 1:1 的图片中裁剪出中间 16:9 的部分。
使用方法:
python3 crop_16x9.py <输入图片路径> [输出图片路径]
如果不指定输出路径,会自动生成 xxx_cropped.png。
"""
import sys
from PIL import Image
import os
def crop_center_16x9(input_path: str, output_path: str = None) -> str:
"""
从正方形图片中裁剪出中心 16:9 区域。
Args:
input_path: 输入图片路径
output_path: 输出图片路径(可选)
Returns:
输出文件的完整路径
"""
# 打开图片
img = Image.open(input_path)
width, height = img.size
# 计算 16:9 裁剪区域
# 假设图片是正方形,内容在中间,上下有填充
# 16:9 的高度 = 宽度 * 9 / 16
target_height = int(width * 9 / 16)
# 计算上下裁剪的边距
top_margin = (height - target_height) // 2
bottom_margin = top_margin + target_height
# 裁剪
cropped = img.crop((0, top_margin, width, bottom_margin))
# 生成输出路径
if output_path is None:
base, ext = os.path.splitext(input_path)
output_path = f"{base}_cropped{ext}"
# 保存
cropped.save(output_path, quality=95)
print(f"✅ 裁剪完成!")
print(f" 原始尺寸: {width}x{height}")
print(f" 裁剪后尺寸: {cropped.size[0]}x{cropped.size[1]}")
print(f" 保存至: {output_path}")
return output_path
if __name__ == "__main__":
if len(sys.argv) < 2:
print("用法: python3 crop_16x9.py <输入图片路径> [输出图片路径]")
sys.exit(1)
input_file = sys.argv[1]
output_file = sys.argv[2] if len(sys.argv) > 2 else None
if not os.path.exists(input_file):
print(f"❌ 找不到文件: {input_file}")
sys.exit(1)
crop_center_16x9(input_file, output_file)
使用方法:
# 先安装依赖
pip3 install Pillow
# 运行裁剪
python3 crop_16x9.py ./my_image.png ./my_image_final.png
输出示例:
裁剪完成!
原始尺寸: 1024x1024
裁剪后尺寸: 1024x576
保存至: ./my_image_final.png
进阶:封装成 Skill
如果你经常需要生成 16:9 或者非1:1比例的图片,可以把这套流程封装成一个 Skill(AntiGravity里面目前也支持了)。
在你的 .agent/skills/ 目录下创建一个文件夹,比如叫 image_generation,里面放两个文件:
1. SKILL.md(技能说明文件)
---
name: 16:9 宽屏图片生成
description: 在 AntiGravity 只能生成 1:1 正方形图片的限制下,通过特殊 Prompt 技巧生成 16:9 宽屏素材。
---
# 16:9 宽屏图片生成技能
## 背景
AntiGravity 的 `generate_image` 工具默认只能生成 1:1 正方形图片。但很多场景(文章封面、视频封面、壁纸)都需要 16:9 宽屏比例。
这个技能通过一个巧妙的 Prompt 技巧解决了这个问题:**让 AI 在正方形画布的中央绘制 16:9 的内容,上下用纯色填充。** 生成后再用脚本裁剪出中间部分。
---
## 触发条件
当用户提到以下关键词时,**必须**使用这个技能:
- "16:9"
- "宽屏"
- "电影比例"
- "封面图"
- "壁纸"
---
## 完整工作流
### 第一步:生成图片
使用以下 **Prompt 模板**:
A single 16:9 cinematic illustration placed in the CENTER of a square canvas.
The top and bottom background areas are solid [填充颜色].
The central 16:9 illustration depicts: [场景描述].
Style: [风格关键词]. 4k resolution, high quality, sharp details.
---
### 第二步:裁剪图片
生成图片后,使用脚本裁剪出中间的 16:9 区域:
python3 /path/to/scripts/crop_16x9.py <输入图片路径> [输出图片路径]
---
## 注意事项
1. **风格统一**:如果一次生成多张图(如系列文章配图),在所有 Prompt 中使用完全相同的 Style 关键词。
2. **自动化**:如果用户没有指定输出路径,脚本会自动在原文件名后加 `_cropped`。
2. scripts/crop_16x9.py(裁剪脚本)
就是上面那个 Python 脚本,放到 scripts/ 子目录下。
这样,以后只要跟 AI 说"帮我生成一张 16:9 的封面图",它就会自动调用这个 Skill,按照流程生成 + 裁剪,一气呵成。
举一反三
这个思路不只适用于 16:9。
理论上,任何你想要的比例都可以用这种方式实现:
| 目标比例 | 高度计算公式 |
|---|---|
| 16:9 | 高度 = 宽度 × 9 ÷ 16 |
| 4:3 | 高度 = 宽度 × 3 ÷ 4 |
| 21:9 (超宽屏) | 高度 = 宽度 × 9 ÷ 21 |
| 9:16 (竖版) | 宽度 = 高度 × 9 ÷ 16(需要调整裁剪逻辑为左右裁剪) |
只需要修改 Prompt 里的比例描述,和脚本里的计算公式就行。
最后
当然,这些只是一个参考。
你完全可以把这个思路告诉 AI,让它帮你编写一个专属的 Skill 和脚本——支持更多比例、更多风格、甚至批量处理。
工具是死的,思路是活的。
希望这篇文章能帮到有同样困扰的朋友。如果你有更好的方案,也欢迎在评论区交流~