活动海报与倒计时脚本包

内容
- s028_bg.py：调用 Gemini API 生成竖版背景，或参考竖版生成同风格横版背景。
- s028_gemini_edit.py：Gemini 图片 API 调用文件，仅使用 Python 标准库。
- s028_poster_set.py：统一排版朋友圈、小红书、公众号和倒计时海报，并计算倒计时发布日期。
- s028_qr_size.py：检查不同二维码尺寸在缩放和 JPEG 压缩后能否解码。
- s028_info.json：虚构活动示例；signup 是 example.com 占位链接，正式使用前必须替换。
- sample-portrait.jpg、sample-wide.jpg：虚构活动背景，可直接用于试排。

一、生成背景（可选）
也可用 Gemini Apps 网页生成，不需要 API Key。若用 API，在 Google AI Studio 创建 Key 并设置：
  export GEMINI_API_KEY="你的 Gemini API Key"

然后运行：
  python3 s028_bg.py portrait 竖版背景.png
  python3 s028_bg.py wide 竖版背景.png 横版背景.png

API 模型默认 gemini-nano-banana-2.1，可用 --model gemini-3-pro-image 更换。图片会上传到 Google，API 按模型和用量收费。

二、安装中文字体
从 Adobe 思源字体仓库下载简体中文 OTF 字体，放到本目录：
- 思源宋体：SourceHanSerifSC-Heavy.otf、SourceHanSerifSC-SemiBold.otf、SourceHanSerifSC-Medium.otf
- 思源黑体：SourceHanSansSC-Medium.otf、SourceHanSansSC-Bold.otf、SourceHanSansSC-Regular.otf

如果放在其它目录，设置：
  export SOURCE_HAN_SERIF_DIR="思源宋体文件夹路径"
  export SOURCE_HAN_SANS_DIR="思源黑体文件夹路径"

三、填写并生成整套海报
1. 编辑 s028_info.json，替换活动名、日期、地点和 signup 报名地址。
2. 安装 uv，然后运行：
  uv run --with pillow --with numpy --with opencv-python-headless --with qrcode --with zxing-cpp \
    s028_poster_set.py s028_info.json sample-portrait.jpg sample-wide.jpg 海报
3. 7 张图保存在 海报 文件夹。用手机逐张扫码，核对活动信息和发布日。

单独测二维码：
  uv run --with pillow --with numpy --with opencv-python-headless --with qrcode --with zxing-cpp \
    s028_qr_size.py sample-portrait.jpg https://example.com/报名地址

注意
- example.com 仅为演示地址，不能直接用于活动报名。
- AI 背景和自动排版都需要人工复核；自动扫码不能替代实际手机扫码。
- 使用客户资料和 Logo 前取得授权；发布海报时按平台功能标识 AI 生成内容。
