AntiGravity只能生成 1:1 图片?一招破解尺寸限制

79 阅读6分钟

下午在 vibe coding 的过程中,突然间的一个思路,在 antigravity 里尝试了下,发现真的可以,所以在这里分享给大家。

起因

最近在用 AntiGravity 写一些文档,为了避免文档的枯燥性,想让 AI 帮我在文章中插入一些生成的配图。因为不想打断写文档的心流,而且 AntiGravity 里面有生图的功能,所以优先考虑了使用编辑器里的自带的生图功能。

但试了几次之后发现一个问题:它只能生成 1:1 的正方形图片

对于文章封面、视频封面这种需要 16:9 宽屏比例的场景,直接用正方形就会有点尴尬——要么上下留白太多,要么强行裁剪丢失内容。

于是就开始想:有没有什么办法能"骗"AI 生成我想要的比例呢?


思路

既然 AntiGravity 限制了输出尺寸必须是 1:1,那就换个角度想:

让 AI 在正方形的画布里,只在中间画一个 16:9 的内容,上下用纯色填充。

生成完之后,再用脚本把中间那部分裁出来,不就得到 16:9 的图了吗?

就像这样:

┌────────────────────┐
│   纯色填充区域      │  ← 上边距
├────────────────────┤
│                    │
│   16:9 主内容区域   │  ← 这才是我们要的
│                    │
├────────────────────┤
│   纯色填充区域      │  ← 下边距
└────────────────────┘

试了一下,真的可以!

demo_before.png Before:原始生成的图片,可以看到上下粉色的辅助填充区域

demo_after.png After:经脚本自动裁剪后的最终成品

具体操作

整个流程分两步:

第一步:写对 Prompt

关键是要在 Prompt 里明确告诉 AI:

  1. 画布是正方形
  2. 主内容只占中间 16:9 的区域
  3. 上下用纯色填充

总结了一个 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。

ratio_examples_v6_wide.png 理论上,任何你想要的比例都可以用这种方式实现

目标比例高度计算公式
16:9高度 = 宽度 × 9 ÷ 16
4:3高度 = 宽度 × 3 ÷ 4
21:9 (超宽屏)高度 = 宽度 × 9 ÷ 21
9:16 (竖版)宽度 = 高度 × 9 ÷ 16(需要调整裁剪逻辑为左右裁剪)

只需要修改 Prompt 里的比例描述,和脚本里的计算公式就行。

最后

当然,这些只是一个参考。
你完全可以把这个思路告诉 AI,让它帮你编写一个专属的 Skill 和脚本——支持更多比例、更多风格、甚至批量处理。
工具是死的,思路是活的。
希望这篇文章能帮到有同样困扰的朋友。如果你有更好的方案,也欢迎在评论区交流~