vue3和ts和vue-cropper 实现图片裁剪预览
Vue-Cropper 是一个基于 Vue.js 的图片裁剪组件库,专为 Web 应用设计。当你在网上搜索的时候发现还有一个叫cropper的库,下面是他们的区别:

二、快速上手
//npm 安装
npm install vue-cropper
//yarn 安装
yarn add vue-cropper
对该插件进行封装,使用vue3 + ts
<script lang="ts" setup>
import 'vue-cropper/dist/index.css'
import { VueCropper } from 'vue-cropper' const emit = defineEmits(['realTime'])
const props = defineProps({
width: { type: Number, default: 640 },
height: { type: Number, default: 740 }
}) const options = reactive({
img: '',
autoCrop: true,
autoCropWidth: 640,
autoCropHeight: 740,
fillColor: '#fff', // 裁剪框填充颜色
fixedBox: true // 固定裁剪框
}) const cropperInstance = ref()
const blobData = ref(new Blob()) const init = () => {
options.img = ''
} const selectImg = async (e: Event) => {
const file = (e.target as HTMLInputElement).files?.[0]
if (!file) return const reader = new FileReader()
reader.onload = async e => {
const img = new Image()
img.onload = async () => {
// 强制放大到最小尺寸
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')! // 设置 canvas 尺寸
canvas.width = img.width
canvas.height = img.height
ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
options.img = canvas.toDataURL()
await nextTick()
// 等待 DOM 更新后设置裁剪框
setFixedCropBox()
}
img.src = e.target!.result as string
}
reader.readAsDataURL(file)
} const setFixedCropBox = () => {
if (!cropperInstance.value?.cropper) return // 正确访问cropper实例
const cropper = cropperInstance.value.cropper // 获取容器真实尺寸
const containerWidth = cropper.containerData.width
const containerHeight = cropper.containerData.height // 计算居中位置
const left = (containerWidth - props.width) / 2
const top = (containerHeight - props.height) / 2 // 正确调用方法
cropper.setCropBoxData({
width: props.width,
height: props.height,
left,
top
})
} // 实时预览
const realTime = (data: any) => {
emit('realTime', data.html)
} // 获取截图的数据 getCropBlob => blob数据
const tailoring = (): Promise<Blob> => {
return new Promise((resolve, reject) => {
if (!cropperInstance.value) {
reject(new Error('裁剪组件未初始化'))
return
} cropperInstance.value.getCropBlob((data: Blob) => {
if (data) {
blobData.value = data
resolve(data)
} else {
reject(new Error('裁剪失败,未获取到 Blob'))
}
})
})
} // 旋转
const rotateLeft = () => {
if (!cropperInstance.value) return
cropperInstance.value.rotateLeft()
} const rotateRight = () => {
if (!cropperInstance.value) return
cropperInstance.value.rotateRight()
} onMounted(() => {
if (props.width && props.height) {
options.autoCropWidth = props.width
options.autoCropHeight = props.height
}
}) defineExpose({ options, selectImg, realTime, tailoring, blobData, init, rotateLeft, rotateRight })
</script> <template>
<vue-cropper
ref="cropperInstance"
:img="options.img"
:autoCrop="options.autoCrop"
:autoCropWidth="options.autoCropWidth"
:autoCropHeight="options.autoCropHeight"
:fixedBox="options.fixedBox"
:fillColor="options.fillColor"
@real-time="realTime"
/>
</template>
父组件进行使用
效果图:


可进行图片旋转,裁剪 自定义裁剪的图片大小
三.vue-cropper的全部参数
vue3和ts和vue-cropper 实现图片裁剪预览的更多相关文章
- node.js平台下,cropper.js实现图片裁剪预览并转换为base64发送至服务端。
		
一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...
 - cropper.js实现图片裁剪预览并转换为base64发送至服务端。
		
一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...
 - Java实现图片裁剪预览功能
		
在项目中.我们须要做些类似头像上传,图片裁剪的功能,ok看以下文章! 须要插件:jQuery Jcrop 后端代码: package org.csg.upload; import java.awt.R ...
 - JavaScript实现图片裁剪预览效果~(第一个小玩具)
		
感觉开始学习的前一个月真的太不珍惜慕课网的资源了 上面蛮多小玩意真的蛮适合我这样刚入门JavaScript的同学加深使用理解 大概收藏了百来门或大或小的课程 有一个感觉就是学这个真的比光是看书看概 ...
 - JavaScript实现本地图片上传前进行裁剪预览
		
本项目支持IE8+,测试环境IE8,IE9,IE10,IE11,Chrome,FireFox测试通过 另:本项目并不支持Vue,React等,也不建议,引入JQuery和Vue.React本身提倡的开 ...
 - jQuery Lightbox图片放大预览
		
简介:jQuery Lightbox图片放大预览代码是一款可以在用户点击页面中的小图片时,将该图片的高清版本以Lightbox的方式放大显示在页面的中间,提高用户的体验度. 效果展示 http://h ...
 - js实现FileUpload选择图片后预览功能
		
当asp.net的FileUpload选择一个图片后不需要上传就能显示出图片的预览功能, 代码: <%@ Page Language="C#" AutoEventWireup ...
 - Android 举例说明自己的定义Camera图片和预览,以及前后摄像头切换
		
如何调用本地图片,并调用系统拍摄的图像上一博文解释(http://blog.csdn.net/a123demi/article/details/40003695)的功能. 而本博文将通过实例实现自己定 ...
 - 图片本地预览 flash html5
		
dataURI 一种能够在页面嵌入外部资源的URI方案.能够降低图片或者样式表的http请求数量,提高效率. ie8把dataURI 的属性值限制在32k以内. 图片本地预览: 由于安全原因,通过fi ...
 - 巧用weui.gallery(),点击图片后预览图片
		
要在页面需要加载的JS文件: <script src="../js/libs/weui.min.js"></script> 可以去weui的文档中下载,这是 ...
 
随机推荐
- 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
			
前言 今天大姚给大家分享一套基于 Material Design 规范实现的.开源(MIT license)且免费的 Blazor 和 Razor 通用组件库:MatBlazor. Blazor介绍 ...
 - C语言 链表操作
			
#include<stdio.h>#include<stdlib.h>struct node{ int data; struct node *next;};int ...
 - Selenium Javascript 滚动条操作
			
js在selenium有许多应用,最主要的有滚动条操作. 实现功能:进入百度搜索结果页->滚动条分别滚到到顶部.底部及指定元素位置. 使用格式: driver.execute_script('w ...
 - RSA算法详解及相关数学原理解析
			
RSA算法详解及相关数学原理解析 前言  为了记录自己学习密码学的过程,也是为了便于个人应付相关课程的考核,故写此博客. 本博客总结了怎么用C++手搓一个RSA算法,以及补补欠缺的一些数学知识和可能 ...
 - Win32控制台获取可执行程序的快捷方式的目标位置、起始位置、快捷键、备注等
			
Win32控制台获取可执行程序的快捷方式的目标位置.起始位置.快捷键.备注等,示例如下图: #include <iostream> #include <atlstr.h> #i ...
 - ORA-01779: 无法修改与非键值保存表对应的列”中涉及的概念和解决方法
			
什么是键值保存表(Key-Preserved Table)? 在理解什么是键值保存表之前,首先要知道 可更新的联接视图 这个概念,键值保存表只是保存了允许更新的字段信息的一张表.为什么会出现这么一张表 ...
 - 查看nginx版本号的几种方法
			
1. 查看服务器上安装的nginx版本号,主要是通过nginx的-v或-V选项,查看方法如下图所示 -v 显示 nginx 的版本. -V 显示 nginx 的版本,编译器版本和配 ...
 - Apollo批量给新创建的用户授可编辑权限
			
背景: 我们要在Apollo中批量给新创建的用户授可编辑权限 apollo系统版本: java-2.1.0 管理员账号:Apollo 可编辑账号:guoyabin 过程: 在没写这段代码的时候从网上搜 ...
 - study Rust-8【使用结构体的方法】
			
1.方法 与函数类似:它们使用 fn 关键字和名称声明,可以拥有参数和返回值,同时包含在某处调用该方法时会执行的代码.2.不过方法与函数是不同的,因为它们在结构体的上下文中被定义(或者是枚举或 tra ...
 - BotSharp 5.0 MCP:迈向更开放的AI Agent框架
			
一.引言 在人工智能快速发展的时代,AI Agent(人工智能代理)作为一种能够自主感知环境.决策并执行动作的实体,在众多领域展现出了巨大的潜力.BotSharp 是一个功能强大的开源项目,由 Sci ...