EP 标识
将源图像 URL 转换为 EP 期望的两个标识文件,并上传到 s3://prod-ep-cmh-insignia(EP AWS 账户 405995789491,区域 us-east-2)。
命名约定,与存储桶中已有的文件一致:
- 键:
<前缀>.png和<前缀>.jpg,位于存储桶根目录,其中<前缀>是 EP 客户前缀(小写字母,例如audubonpd、alexanderncsheriff)。 - 两者均为 512x512。标识会被裁剪、缩放以适应并居中显示,四周留有少量边距。
- PNG 具有透明背景。JPG 具有白色背景。
- 内容类型分别为
image/png和image/jpeg。该存储桶使用 BucketOwnerEnforced,因此不要设置 ACL。
输入
- 源 URL。 如果用户未提供,请询问。本地文件路径同样适用。
- 客户前缀。 如果未提供,请询问。不要根据机构名称猜测。将其标准化为小写,并拒绝任何除
a-z 0-9 - _以外的字符。
步骤
1. 处理图像
在草稿板中(或使用 mktemp -d)创建一个新的工作目录,然后运行:
uv run -q <skill_dir>/scripts/process_insignia.py "<url>" "<前缀>" "<工作目录>"
uv 会根据脚本的内联元数据安装依赖项。首次运行 AI 背景去除时,会下载约 180 MB 的模型到 ~/.u2net。
默认背景模式(--bg auto)的工作方式如下:
- 如果源图像已经具有透明背景,则保持不变。
- 如果边框是单一纯色(通常是白色),则仅去除与边缘连接的背景。徽章内部的白色文字或细节会被保留。
- 否则使用 AI 图像分割(rembg 的
isnet-general-use)。
覆写选项:--bg ai、--bg flood 和 --bg none 强制指定模式。--margin N 设置内边距(以像素为单位,默认为 4)。
如果下载失败并返回 403 或 429 错误,或者 URL 是 SVG 或网页而不是图像,请告知用户并要求提供直接的图像链接。用户也可以自行下载文件并提供本地路径。
2. 上传前预览
在对比色背景上构建 PNG 预览,并与 JPG 并排显示:
convert \( <工作目录>/<前缀>.png -background '#c33' -flatten \) <工作目录>/<前缀>.jpg +append <工作目录>/preview.png
使用读取工具打开 preview.png 并检查:
- 没有残留背景(红色侧没有光晕、方框或边缘残留)。
- 标识的各个部分都没有缺失(内部白色被去除导致的空洞,或被裁剪掉的文字)。
- 是正确的机构标识。
如果结果不正确,使用不同的 --bg 模式重新运行。向用户展示预览,同时告知脚本报告的背景方法以及任何关于源图像尺寸较小的警告。
3. 检查 AWS 访问权限和现有文件
aws sts get-caller-identity --query Account --output text # 预期 405995789491
aws s3 ls s3://prod-ep-cmh-insignia/<前缀>.
如果 <前缀>.png 或 <前缀>.jpg 已存在,请告知用户。这是一个生产存储桶,因此在覆盖之前需要获得明确的确认。首先备份现有文件:
aws s3 cp s3://prod-ep-cmh-insignia/<前缀>.png <工作目录>/backup/<前缀>.png
aws s3 cp s3://prod-ep-cmh-insignia/<前缀>.jpg <工作目录>/backup/<前缀>.jpg
即使还没有任何文件存在,在向用户展示预览后也需确认上传。
4. 上传
aws s3 cp <工作目录>/<前缀>.png s3://prod-ep-cmh-insignia/<前缀>.png --content-type image/png
aws s3 cp <工作目录>/<前缀>.jpg s3://prod-ep-cmh-insignia/<前缀>.jpg --content-type image/jpeg
使用 aws s3 ls s3://prod-ep-cmh-insignia/<前缀>. 验证上传,然后报告两个 S3 密钥、它们的大小以及备份文件的保存位置。