Skip to content

BizAvatarCropper 图片裁剪 ​

头像 / 图片裁剪弹窗:自研 canvas 实现,零第三方依赖。视口即裁剪区——拖拽移动图片、滚轮缩放、按钮缩放 / 左右旋转 90°、三分构图网格、实时预览(圆形 / 方形),确认输出 blob / file / base64(canvas 矩阵与渲染 transform 严格一致,所见即所得)。用户头像、证件照、封面图上传前裁剪(可作为 BizUploadImage 的 before-upload 前置步骤)。

基础用法 ​

1:1 头像裁剪 + 圆形预览,确认输出 base64 实时回显。

直接产出 File ​

output-type="file" 确认后拿到 File 对象(可直接交 FormData / OSS 直传);16:9 封面 + jpeg 压缩 + loading 上传中态。

多比例与预览形状 ​

ratio 任意比例(1 / 4:3 / 16:9),preview-shape 圆形与方形预览对比。

压缩输出 ​

jpeg 格式透明区域按 fillColor 白底填充;quality 0.8 平衡清晰度与体积

output-width 限定输出宽度 + quality 质量控制体积;jpeg 格式透明区域按 fill-color 白底填充。

关闭旋转 ​

证件照场景 rotateable=false 锁定旋转,仅缩放 + 拖拽对齐;3.5:4.5 标准证件照比例。

上传链路整合 ​

本地选图(FileReader 转 dataURL)→ 裁剪 → 回显,全链路无需接口

本地选图(FileReader 转 dataURL)→ 裁剪 → 头像回显,全链路无需接口。

Props ​

属性名类型默认值说明
visiblebooleanfalse弹窗显隐(v-model:visible)
srcstring''待裁剪图片(url / dataURL;跨域 url 会因 canvas 污染输出失败,建议同源或 base64)
titlestring'裁剪图片'弹窗标题
rationumber1裁剪宽高比(1 头像、4/3、16/9…)
preview-shape'circle' | 'square''circle'预览形状
output-type'blob' | 'file' | 'base64''blob'输出形态(file 时 payload 附带 File 对象)
output-widthnumber视口像素宽输出宽度(压缩出口)
output-mime'image/png' | 'image/jpeg' | 'image/webp''image/png'输出格式(透明图请用 png)
qualitynumber0.9输出质量(jpeg / webp)
fill-colorstring'#ffffff'非透明格式(jpeg / webp)填充底色
rotateablebooleantrue允许旋转按钮
confirm-textstring'确认裁剪'确认按钮文案
cancel-textstring'取消'取消按钮文案
loadingbooleanfalse确认按钮 loading(外部上传中置 true)

Events ​

事件名参数说明
update:visible(value: boolean)弹窗显隐(v-model:visible)
cropped(payload: BizAvatarCroppedPayload)裁剪完成:{ blob, base64, file?, width, height }
cancel()取消关闭

Expose ​

名称类型说明
crop() => void手动触发裁剪(与确认按钮等价)
reset() => void复位变换(缩放 / 旋转 / 位置)

TIP

裁剪交互为「拖图不拖框」模型:缩放下限锁定 cover(图片始终铺满视口,不会裁出空白);滚轮缩放围绕视口中心。