Skip to content

ImageCrop 图片裁剪

强大的图片裁剪功能,支持自由裁剪和固定比例裁剪。

基础用法

基础的图片裁剪功能。调整裁剪框后,点击"确认裁剪"按钮完成裁剪。

vue
<template>
  <ExImageCrop
    src="https://example.com/image.jpg"
    shape="rect"
    :show-grid="true"
    @crop="handleCrop"
  />
</template>

<script setup>
const handleCrop = (result) => {
  console.log('裁剪结果:', result);
};
</script>

固定比例裁剪

设置 aspect-ratio 属性可以固定裁剪比例。

vue
<template>
  <ExImageCrop
    src="https://example.com/image.jpg"
    shape="rect"
    :aspect-ratio="16 / 9"
    @crop="handleCrop"
  />
</template>

圆形裁剪

设置 shape="circle" 可以进行圆形裁剪,适合头像等场景。

vue
<template>
  <ExImageCrop src="https://example.com/avatar.jpg" shape="circle" @crop="handleCrop" />
</template>

自由裁剪

不设置 aspect-ratio 时,可以自由调整裁剪区域的宽高比。

vue
<template>
  <ExImageCrop src="https://example.com/image.jpg" shape="rect" mode="free" @crop="handleCrop" />
</template>

裁剪质量

可以设置裁剪输出的图片质量。

vue
<template>
  <ExImageCrop src="https://example.com/image.jpg" shape="rect" :quality="0.9" @crop="handleCrop" />
</template>

缩放和旋转

支持图片的缩放和旋转操作。

vue
<template>
  <ExImageCrop
    src="https://example.com/image.jpg"
    shape="rect"
    :zoomable="true"
    :rotatable="true"
    @crop="handleCrop"
  />
</template>

API

Props

属性说明类型默认值
src图片源string | File-
shape裁剪形状'rect' | 'circle''rect'
mode裁剪模式'free' | 'fixed''free'
aspect-ratio固定宽高比number-
quality输出质量 (0-1)number0.9
output-type输出格式'image/png' | 'image/jpeg' | 'image/webp''image/jpeg'
show-grid是否显示网格booleantrue
zoomable是否可缩放booleantrue
rotatable是否可旋转booleantrue
min-crop-width最小裁剪宽度number50
min-crop-height最小裁剪高度number50
initial-crop-area初始裁剪区域CropArea-

Events

事件名说明类型
crop裁剪完成时触发(result: CropResult) => void
change裁剪区域改变时触发(area: CropArea) => void
zoom缩放时触发(scale: number) => void
rotate旋转时触发(angle: number) => void

Methods

方法名说明类型
crop执行裁剪() => Promise<CropResult>
reset重置裁剪区域() => void
zoomIn放大() => void
zoomOut缩小() => void
rotateLeft逆时针旋转90度() => void
rotateRight顺时针旋转90度() => void
setZoom设置缩放比例(scale: number) => void
setRotate设置旋转角度(angle: number) => void

类型定义

typescript
interface CropArea {
  x: number;
  y: number;
  width: number;
  height: number;
}

interface CropResult {
  blob: Blob;
  dataUrl: string;
  width: number;
  height: number;
  size: number;
}

无障碍支持

  • 完整的键盘导航支持
  • ARIA 属性标注
  • 屏幕阅读器友好

主题定制

css
:root {
  --ex-crop-border-color: var(--ex-color-neon-blue-500);
  --ex-crop-grid-color: rgba(255, 255, 255, 0.3);
  --ex-crop-mask-color: rgba(0, 0, 0, 0.5);
}