图片批量处理
攒了几十张图要统一规格,一次拖进来全部处理完,再打包下载。
多选、整个文件夹拖进来都行,一次最多 60 张。队列是串行处理的,一张处理完就释放,所以内存峰值只和最大那张图有关。
处理动作
- 缩放按长边上限或百分比统一尺寸,长边限 1600 像素是最常用的规格。
- 裁剪按固定宽高比居中裁剪,把一组长宽不一的图统一成同一个比例。
- 转格式统一转成 JPEG、PNG 或 WebP,按需选择是否保留透明通道。
- 压缩按画质参数重编码,在看得过去的画质下把体积压下来。
- 加水印右下角叠加文字水印,位置和字号按图片短边自动换算。
这五步按固定顺序执行:先裁剪(去掉多余像素,后面的运算都更省)、再缩放、再加水印、最后编码。顺序反了水印字号就不可控了。
参数
命名模板
点上面的按钮把占位符插进模板。模板里如果连 {name} 和 {index} 都没有,一集合照很容易生成同名文件,这里会自动加 -2、-3 兜底,但最好在模板里就区分开。没写扩展名时会自动补上 .jpg。
预览:(加入图片后显示)
怎么用
第一步,把要处理的图一次拖进来(或者点「选择图片」多选)。第二步,设好长边上限、要不要裁剪成统一比例、输出格式和质量,需要的话填个水印文字。第三步,改一下命名模板——这一步别跳过,模板里一定要带 {name} 或 {index},不然容易互相覆盖。最后点「开始处理」,跑完可以直接打包成 zip 一次存下来。
处理失败的那几张会在清单里标出原因(通常是文件损坏或者尺寸超出画布上限),换掉它们重跑一遍即可,已经成功的不会受影响。
批量处理要留心的地方
处理顺序会影响体积。这一批里五个动作的先后是固定的:先裁剪(去掉多余像素,后面所有运算都更省)、再缩放、再加水印、最后编码和压缩。顺序反过来的话,水印会跟着缩放一起被缩放,字号就不可控了;先压缩再缩放则等于把画质损失做了两遍。批量处理没有交互式微调的机会,所以顺序一定要在开始前就想清楚。
一次处理多少张要看内存。每张图在内存里是「宽 × 高 × 4 字节」,一张 1200 万像素的照片就是 48 MB,加上原图副本、画布和输出缓冲,单张峰值可能上到 200 MB。队列如果一次把所有图都解码进来,二十张就能把标签页撑到几 GB 然后崩掉。所以这里是串行处理:一张处理完、释放掉、再开下一张,用时间换内存。
命名模板决定文件是不是会被覆盖。如果模板里只有 {width} 或 {date} 这种不含原名的占位符,一集合照就会互相覆盖,最后只剩一张。安全做法是模板里一定保留 {name},需要统一顺序时再拼上 {index}。这里还会额外做一次重名检查,重复的自动加 -2、-3,但来源不同的文件最好还是在模板里区分开。
按目标体积压缩是反复试出来的。编码后的体积和画质参数不是线性关系,没法一次算出「多少质量刚好 200 KB」。常见做法是二分:先按 0.8 编一次看体积,大了就把质量降到 0.6,小了就升到 0.9,来回几次到目标附近。本地批量处理可以不追求精确命中,先按统一质量出一批,个别超标的再单独处理更省时间。
批量下载可能被浏览器拦。一个页面短时间内连续触发几十次下载,浏览器会弹「是否允许下载多个文件」,用户点了拒绝后面的就都存不下来。更稳的做法是把结果打包成 zip 一次性下载,或者逐张确认后再点下一张。这里保留单张下载按钮,数量多的时候建议用压缩包。
同一批参数重跑一遍结果应该一致。批量处理最怕的是「同一套参数两次跑出来不一样」。这里除了水印和噪点之外所有操作都是确定性的,同一张图跑两次得到的字节完全相同,因此可以放心重跑。如果有文件处理失败,直接重跑整批、用命名去重覆盖,不用担心结果漂移。