Skip to content

xtf-image-crop

组件说明

xtf-image-crop 是图片裁剪组件,支持拖拽平移、缩放裁剪框、圆形/矩形裁剪、比例预设和 Canvas 导出,适用于头像裁剪、证件照裁剪和图片编辑等场景。


基础用法

1. 基础裁剪

通过 src 传入图片地址,通过 widthheight 设置导出尺寸:

vue
<template>
  <xtf-image-crop :src="imageSrc" :width="800" :height="800" @confirm="onConfirm" />
</template>

<script>
export default {
  data() {
    return {
      imageSrc: '/static/photo.jpg'
    }
  },
  methods: {
    onConfirm(result) {
      console.log('裁剪结果:', result.tempFilePath)
    }
  }
}
</script>

2. 圆形裁剪

通过 cropShape 设置裁剪形状为圆形:

vue
<template>
  <xtf-image-crop
    :src="imageSrc"
    crop-shape="circle"
    :width="400"
    :height="400"
    @confirm="onConfirm"
  />
</template>

<script>
export default {
  data() {
    return {
      imageSrc: '/static/avatar.jpg'
    }
  },
  methods: {
    onConfirm(result) {
      console.log('头像裁剪:', result.tempFilePath)
    }
  }
}
</script>

3. 可调整裁剪框

通过 cropResizable 启用裁剪框大小调整:

vue
<template>
  <xtf-image-crop :src="imageSrc" crop-resizable :lock-crop-aspect="false" @confirm="onConfirm" />
</template>

<script>
export default {
  data() {
    return {
      imageSrc: '/static/photo.jpg'
    }
  },
  methods: {
    onConfirm(result) {
      console.log('裁剪结果:', result.tempFilePath)
    }
  }
}
</script>

4. 比例预设与变换控制

通过组件实例调用 setRatioPresetrotateflipresetTransformsetRatioPreset 的参数必须是 ratioPresets 中已定义的 keyrotate 不传参数时顺时针旋转 90 度,flip 传入 'y' 时上下翻转,其他值或不传参数时左右翻转。

vue
<template>
  <view>
    <view style="height: 900rpx">
      <xtf-image-crop
        ref="cropper"
        :src="imageSrc"
        :ratio-presets="ratioPresets"
        default-ratio-key="square"
        @confirm="onConfirm"
      />
    </view>
    <view style="display: flex; flex-wrap: wrap; gap: 16rpx; padding: 24rpx">
      <xtf-button label="1:1" @click="setRatio('square')" />
      <xtf-button label="4:3" @click="setRatio('landscape')" />
      <xtf-button label="旋转" @click="rotate" />
      <xtf-button label="左右翻转" @click="flip" />
      <xtf-button label="重置" @click="resetTransform" />
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      imageSrc: '/static/photo.jpg',
      ratioPresets: [
        { key: 'square', label: '1:1', width: 800, height: 800 },
        { key: 'landscape', label: '4:3', width: 1200, height: 900 }
      ]
    }
  },
  methods: {
    setRatio(key) {
      this.$refs.cropper.setRatioPreset(key)
    },
    rotate() {
      this.$refs.cropper.rotate()
    },
    flip() {
      this.$refs.cropper.flip()
    },
    resetTransform() {
      this.$refs.cropper.resetTransform()
    },
    onConfirm(result) {
      console.log('裁剪结果:', result.tempFilePath)
    }
  }
}
</script>

全部属性

属性类型默认值作用描述适用范围
srcString''图片地址图片
widthString | Number1080导出宽度导出
heightString | Number1080导出高度导出
machineId / templateIdString | Number''业务机器与模板标识,原样随组件状态保留业务上下文关联
confirmTextString'确定'确认按钮文字按钮
tipTextString''提示文字提示
showTipBooleantrue是否显示提示提示
ratioPresetsArray[]比例预设列表比例
defaultRatioKeyString''默认比例键比例
cropShapeString'rect'裁剪形状(rect/circle)形状
cropResizableBooleanfalse裁剪框是否可调整交互
lockCropAspectBooleantrue是否锁定裁剪比例比例
minCropSizeString | Number160最小裁剪尺寸限制
exportFormatString'png'导出格式导出
exportQualityString | Number1导出质量导出
maxExportSideString | Number4096最大导出边长限制
maxExportPixelsString | Number16000000最大导出像素限制
backgroundColorString''导出画布背景色透明图片转 JPEG 等场景

事件

事件名称触发时机回调参数参数说明
confirm确认裁剪时触发(result)包含 tempFilePath 等信息
error发生错误时触发(err)错误信息
ready图片信息读取并完成初始布局时触发({ width, height, path, orientation })实际图片尺寸、读取后的图片路径及图片方向

方法

方法名参数返回值说明
setRatioPreset(key: String)-切换到 ratioPresets 中对应 key 的比例预设
rotate(step?: Number)-旋转图片;省略参数时旋转 90 度
flip(direction?: String)-翻转图片;传 'y' 上下翻转,其他值或省略参数时左右翻转
resetTransform--重置旋转和翻转状态,并按当前比例预设重新布局

主题说明

  • 裁剪框使用白色边框和网格线
  • 遮罩使用半透明黑色
  • 确认按钮使用主题色

如需全局调整主题,请在 xtf-config-provider 或主题配置中覆盖相关 CSS 变量。

MIT Licensed