Skip to content

Cropper 图片裁剪

代码演示

基础用法

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

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

const cropperRef = ref()

function onChange(info) {
    console.log(info)
}
</script>

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

比例

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

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

const cropperRef = ref()

function onChange(info) {
    console.log(info)
}
</script>

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

文件类型

vue
<template>
    <x-cropper
        ref="cropperRef"
        :src="assets('avatar.jpg')"></x-cropper>
    <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>

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

const cropperRef = ref()

async function handleBase64() {
    const result = await cropperRef.value.getBase64()
    console.log(result)
    message.success('已通过 console 打印')
}

async function handleBlob() {
    const result = await cropperRef.value.getBlob()
    console.log(result)
    message.success('已通过 console 打印')
}

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

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

弹窗中使用

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

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

const cropperDialogRef = ref()

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

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

<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 作者所有,保留所有权利。