图片压缩自动化 是做什么的?
概述
使用 sharp 库批量调整大小并压缩产品图片,在几秒钟内将其转换为适用于网页的 .jpg、.webp 或 .avif 文件,同时保留原始文件名,将透明 PNG 扁平化为白色背景,并严格保持宽高比(800px 单高度自动缩放或 WxH 精确检查)。
核心原则: 绝不假设工作驱动器(如 F:\),绝不在未确认时静默回退到 800x800 或 jpg,绝不裁剪或扭曲图片。
快速参考
| 情况 | 操作 |
|---|---|
首次运行(node_modules/ 缺失) | 运行 npm install(需要 Node.js >= 20.0.0) |
.imagerc.json 缺失且未指定 --dir | 询问用户 其工作文件夹后再运行 |
| 目标尺寸/高度或格式缺失 | 询问用户 尺寸(800px 高度或 WxH)和格式(jpg、webp 或 avif)后再运行 |
用户只给出高度(例如 800px in webp) | 传递 --size 800px --format webp(自动根据每张图片计算比例宽度) |
用户给出工作文件夹 + WxH + 格式 | 运行 node bin/cli.js --dir "<folder>" --size "<WxH>" --format <jpg|webp|avif> |
| 用户有单独的原始图片和导出文件夹 | 运行 node bin/cli.js --input "<in>" --output "<out>" --size "<px|WxH>" --format <fmt> |
精确 WxH 宽高比不匹配 | 不 裁剪/拉伸;报告输出中建议的匹配尺寸(或建议在适当时使用 800px 高度模式) |
| 透明 PNG 背景 | 自动扁平化为 #ffffff(可通过 --bg "#hex" 更改) |
分步代理工作流程
每当用户要求您使用此仓库压缩或调整图片大小时,请按以下顺序执行:
1. 检查设置与依赖项
- 确认
node_modules/sharp存在。如果是新克隆的仓库,则运行npm install。 - 检查仓库根目录下是否存在
.imagerc.json(除非用户已在提示中指定了文件夹)。- 如果
.imagerc.json不存在 且用户 未 指定文件夹,则 先询问用户: “您希望为您的input和output图片文件夹使用哪个文件夹?(例如,./表示当前项目文件夹,~/Desktop/store-images或D:\Images。)” - 绝不假设
F:\Image Compress Automation或猜测为~/Desktop。
- 如果
2. 检查 input/ 并确认尺寸与格式
- 确保
<folder>/input和<folder>/output目录存在(或传递--dir "<folder>"让 CLI 自动创建它们)。 - 检查输入文件夹中有多少支持格式的图片(
.png、.jpg、.jpeg、.webp、.avif)。如果为0,则告知用户确切的<folder>/input路径,让他们将图片放入其中,然后停止。 - 如果用户 未 在当前请求中明确说明目标高度/尺寸或输出格式,则 在执行前询问 —— 即使非 TTY/无标志的回退默认值为
800x800和jpg。
3. 以非交互方式执行并报告结果
使用标志显式运行 CLI(避免在非 TTY 工具 shell 中使用裸 node bin/cli.js,以免依赖静默默认值):
node bin/cli.js --dir "<工作文件夹>" --size "<HEIGHTpx or WIDTHxHEIGHT>" --format "<jpg|webp|avif>"
用户请求时可使用的可选标志:
--format <jpg|webp|avif>(默认值jpg;webp比 JPG 小约 25–35%,avif小约 30–50%)--quality <1-100>(JPGmozjpeg/ WebPeffort: 6默认为85,AVIFeffort: 4默认为65)--bg "<#hex>"(透明 PNG 扁平化默认使用#ffffff)--strict(如果任何文件被跳过或失败,返回退出码1)
如果用户希望此工作文件夹在交互式终端运行(npm start)中被记住,您可以提及或保存 .imagerc.json(已加入 gitignore)或让他们运行 npm run setup。
4. 验证并总结输出
直接从命令输出中报告:
- 总共转换/跳过/失败的文件数量以及节省的空间(
MB和%)。 - 确切的输出文件夹路径(
<工作文件夹>/output)。 - 对于任何
aspect-ratio-mismatch跳过,展示 CLI 打印的该文件的原始尺寸/比例以及建议的比例尺寸。
常见错误与红旗标记
| 想法 / 错误 | 失败原因及应对方法 |
|---|---|
“我直接运行 node bin/cli.js,不带 --size 或 --format” | 非 TTY 回退会静默选择 800x800 和 jpg。务必先与用户确认文件夹、尺寸/高度(800px 或 WxH)和格式(jpg/webp/avif),并传递 --dir、--size 和 --format。 |
“用户想要 800×800,但照片是 1:2 比例——我会传递 fit: cover 或编写自定义裁剪脚本” | 违反核心规则:绝不静默裁剪或拉伸。让 CLI 拒绝不匹配并提供比例尺寸。 |
“我会提交 .imagerc.json 或测试 PNG 到 input/” | .imagerc.json、input/* 和 output/*(除 .gitkeep 外)已加入 gitignore 以保护用户隐私。请保持它们不被跟踪。 |
“我会只传递 --input 而不传递 --output” | 没有 --output 或 --dir 时,输出会回退到 <cwd>/output。始终传递 --dir(标准流程)或同时传递 --input 和 --output。 |