Skip to content

ImageCropper 图片裁切

介绍

基于 useTouchZoom 的图片裁切组件:双指缩放、单指拖动、可选双指旋转,裁切框始终被图片覆盖,支持按比例 / 圆形裁切并导出临时文件。

TIP

建议在真机或开启触控模拟的环境下体验双指手势。组件默认开启 webp(便于网络 WebP;通用 Image 组件仍默认关闭)。导出默认 PNG,可通过 file-type 设为 jpgquality 仅对 jpg 生效)。圆形裁切或需要透明通道时请使用 pngjpg 会丢失透明。GIF 等动图裁切后会变为静态图并丢失动画。部分端对本地 WebP 的 getImageInfo / canvas 支持不稳定,可真机验证;与 Uploader 搭配时可在 after-choose 中跳过不支持格式(见 Uploader 搭配裁切)。

基础用法

传入图片地址,组件会按 aspect-ratio 生成居中裁切框。

html
<vd-image-cropper
  ref="cropperRef"
  src="/static/exh-1.jpg"
  custom-class="cropper-box"
/>
ts
const cropperRef = ref();

async function handleCrop() {
  const path = await cropperRef.value.crop();
  console.log(path);
}

裁切比例

通过 aspect-ratio 设置裁切框宽高比,例如 16 / 94 / 31

html
<vd-image-cropper :aspect-ratio="16 / 9" src="..." />

圆形裁切

设置 circle 后裁切框为圆形(强制 1:1),圆外区域透明;需透明时请保持 file-typepng(默认)。

html
<vd-image-cropper circle src="..." />

双指旋转

默认开启双指旋转,松手吸附到最近的 90°;不需要时可设 :rotatable="false"

html
<vd-image-cropper :rotatable="false" src="..." />

导出尺寸

默认按「裁切框宽度 × export-scale(默认 2)」导出,比屏上框更清晰。也可用 export-width 指定绝对宽度(优先于 export-scale)。

html
<!-- 默认约 2 倍裁切框宽度 -->
<vd-image-cropper src="..." />

<!-- 指定倍率 -->
<vd-image-cropper :export-scale="3" src="..." />

<!-- 指定绝对宽度 -->
<vd-image-cropper :export-width="1080" src="..." />

API

Props

参数说明类型默认值
src图片地址string''
webp系统不支持时是否启用 webp(同 image,仅网络资源)booleantrue
aspect-ratio裁切框宽高比(宽 / 高);circle 时固定为 1number | string1
crop-size裁切框相对容器较短边的占比(0~1)number | string0.8
max-zoom最大缩放倍数number | string3
zoomable是否允许双指捏合缩放booleantrue
wheel-zoom滚轮单次缩放步进number | string0.1
show-grid是否显示九宫格booleantrue
circle是否圆形裁切booleanfalse
rotatable是否允许双指旋转booleantrue
height容器高度number | string240
file-type导出图片类型,可选 png jpg;圆形 / 透明请用 pngImageExportTypepng
quality导出图片质量(0~1),仅 jpg 时生效number | string1
export-scale导出相对裁切框的倍率(未传 export-width 时生效)number | string2
export-width导出图片宽度(px),优先于 export-scalenumber | string-

代替原始 Props

参数说明类型默认值
custom-id根节点idstring-
custom-class根节点类名ClassValue-
custom-style根节点样式StyleValue-

Events

事件名说明回调参数
click点击时触发MouseEvent
load图片信息加载完成{ width, height }
error图片加载或处理失败unknown
crop导出成功{ path }

Expose

方法名说明参数返回值
reset重置缩放、位移与旋转--
getCropArea获取裁切区域(原图像素 AABB,含 rotate-ImageCropperArea | null
crop导出裁切图片-Promise<string>

类型定义

ts
import type {
  ImageCropperProps,
  ImageCropperEmits,
  ImageCropperArea,
  ImageCropperInstance,
} from 'vital-design';

赣ICP备2025061025号-1