Skip to content

Cropper 图片裁剪

代码演示

基础用法

vue
<script setup>
import { ref } from 'vue'
import { assets } from '@/utils'

const cropperRef = ref()

function onChange(info) {
  // eslint-disable-next-line no-console
  console.log(info)
}
</script>

<template>
  <x-cropper
    ref="cropperRef"
    :src="assets('avatar.jpg')"
    @change="onChange"
  />
</template>

<style lang="less" scoped></style>

比例

vue
<script setup>
import { ref } from 'vue'
import { assets } from '@/utils'

const cropperRef = ref()

function onChange(info) {
  // eslint-disable-next-line no-console
  console.log(info)
}
</script>

<template>
  <x-cropper
    ref="cropperRef"
    :aspect-ratio="1 / 1"
    :src="assets('avatar.jpg')"
    @change="onChange"
  />
</template>

<style lang="less" scoped></style>

文件类型

vue
<script setup>
import { message } from 'ant-design-vue'
import { ref } from 'vue'
import { assets } from '@/utils'

const cropperRef = ref()

async function handleBase64() {
  const result = await cropperRef.value.getBase64()
  // eslint-disable-next-line no-console
  console.log(result)
  message.success('已通过 console 打印')
}

async function handleBlob() {
  const result = await cropperRef.value.getBlob()
  // eslint-disable-next-line no-console
  console.log(result)
  message.success('已通过 console 打印')
}

async function handleFile() {
  const result = await cropperRef.value.getFile()
  // eslint-disable-next-line no-console
  console.log(result)
  message.success('已通过 console 打印')
}
</script>

<template>
  <x-cropper
    ref="cropperRef"
    :src="assets('avatar.jpg')"
  />
  <a-space class="mt-8-1">
    <a-button
      type="primary"
      @click="handleBase64"
    >
      Base64
    </a-button>
    <a-button
      type="primary"
      @click="handleBlob"
    >
      Blob
    </a-button>
    <a-button
      type="primary"
      @click="handleFile"
    >
      File
    </a-button>
  </a-space>
</template>

<style lang="less" scoped></style>

弹窗中使用

vue
<script setup>
import { message } from 'ant-design-vue'
import { ref } from 'vue'
import { assets } from '@/utils'

const cropperDialogRef = ref()

function handleOpen() {
  cropperDialogRef.value.open({
    src: assets('avatar.jpg'),
    aspectRatio: 1 / 1,
  })
}

function onOk(base64, info) {
  // eslint-disable-next-line no-console
  console.log(base64, info)
  message.success('已通过 console 打印')
}
</script>

<template>
  <a-button
    type="primary"
    @click="handleOpen"
  >
    打开弹窗
  </a-button>
  <x-cropper-dialog
    ref="cropperDialogRef"
    @ok="onOk"
  />
</template>

<style lang="less" scoped></style>

API

Props

名称说明类型默认值
src图片地址string-
aspect-ratio比例,例如:0 1/1 4/3 16/9number0
quality输出质量,取值范围:0-1number1
type图片类型,可选:jpg、png、gifstringjpg

提示

在弹窗中使用时,同样支持以上选项

Events

名称说明返回值
initialized初始化完成cropper
change裁剪尺寸发生变化{ base64, blob, file }

Actions

名称说明返回值
getBase64获取 base64 字符串Promise
getFile获取 File 对象Promise
getBlob获取二进制对象Promise

提示

基于 cropperjs 实现,更多参数:https://www.npmjs.com/package/cropperjs

可根据实际业务进行扩展。详见:/src/components/Cropper.vue

警告

CropperCropperDialogUploadImage 引用 ,自行扩展后请检查相关组件可用性

本文档内容版权为 XYAdmin 作者所有,保留所有权利。