更新记录

1.0.0(2026-11-05) 下载此版本

1.0.0

  • 首个版本:compress(质量阶梯逼近目标体积)、batchCompress(并发池+进度)、watermark(九宫格布局纯函数)、convertFormat、thumbnail
  • 压缩结果比原图大时如实回退原图(kept:'original'),绝不交出更差的产物

平台兼容性

pk-image 图片套件

图片压缩、批量并发、目标体积逼近、文字水印九宫格、格式转换、缩略图。压缩无效自动回退原图,绝不交出更差的产物。

5 分钟接入

import imgkit from '@/uni_modules/pk-image/js_sdk/index.js';

// 基础压缩(质量 80,长边限 1080)
const r = await imgkit.compress({ src: tempFilePath, quality: 80, maxSide: 1080 });
// → { ok, path, bytes, originalBytes, ratio: 35, kept:'compressed', human:{before:'3.2MB', after:'1.1MB'} }

// 目标体积逼近:自动质量阶梯迭代到 ≤200KB
await imgkit.compress({ src, targetKB: 200, maxSide: 1600 });

// 批量并发(并发 3,进度回调)
await imgkit.batchCompress(paths, {
  concurrency: 3,
  onProgress: (done, total, r) => console.log(`${done}/${total}`, r.ratio + '%')
});

// 缩略图(语义糖:maxSide 200 / quality 70 / targetKB 50)
await imgkit.thumbnail({ src });

// 文字水印(九宫格布局,canvas 合成)
const wm = await imgkit.watermark({ src, text: '@我的水印', position: 'bottom-right' });
// 返回 layout.draw(ctx) 供页面 canvas 执行(见 demo 页)

API 全表

方法 签名 说明
supported supported() 能力探测 { compress, canvas, env },各端差异如实上报
getInfo getInfo(src) 图片信息 { width, height, size, format, orientation };format 含魔数嗅探兜底
compress compress(args) 压缩。args:{ src, quality(1-100)=80, maxSide, targetKB, type:'jpg'\|'png' }
batchCompress batchCompress(list, { concurrency?, onProgress?(done,total,r), args? }) 并发池批量压缩,结果按原下标归位
watermark watermark(args) 文字水印布局与绘制指令。args:{ src, text, position, color, fontSize, marginPct }
convertFormat convertFormat({ src, type, quality? }) 格式转换(canvas 通道,H5 最完整)
thumbnail thumbnail(args) 缩略图语义糖
humanSize humanSize(bytes) 可读大小('2.0KB')

compress 返回

字段 说明
path 压缩后路径;压缩无效时回退原图路径(kept:'original' 如实标注)
bytes / originalBytes / ratio 产物大小 / 原大小 / 压缩率 %
width / height 产物尺寸(contain 缩放,绝不放大)
quality 实际使用的质量值(targetKB 阶梯迭代后的)
human { before, after } 可读大小

watermark 返回

layout: { anchor:{x,y}, fontSize, color, draw(ctx) }——在页面 canvas 上下文里执行 layout.draw(ctx) 即完成绘制(demo 页有完整示例)。

压缩策略(core.js 纯函数,可单测)

  1. fitSize:contain 等比缩放,只缩不放
  2. nextQuality:目标体积未达 → 质量 −15 重试(下限 40,≤3 轮);远低于目标 → +10 回升
  3. compareResult:产物 ≥ 原图 → 回退原图

错误码

码 含义
E-IM-01 宽高非法
E-IM-02 batchCompress 入参非数组
E-IM-03 src 必填
E-IM-04 quality/maxSide 取值非法
E-IM-05 水印缺 text
E-IM-10 读取图片失败(错误码可用于排查)

FAQ

Q: 压缩后画质很差? 默认 quality 80 + 只缩不放;要控体积用 targetKB 让阶梯自动找平衡点,避免一次打到低质量。

Q: 小程序上 compressedWidth 不生效? 部分端版本差异,SDK 会回退 canvas 重采样;demo 页标注了各端实测矩阵。

Q: 大图会 OOM 吗? App/小程序走原生 compressImage 不占 JS 内存;canvas 通道先降采样再绘制。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

MIT协议

暂无用户评论。