Vue3+cropperjs 实现图像裁剪功能
安装cropperjs
npm install cropperjs --save 或者 yarn add cropperjs
封装一个cropperImg组件
//cropperImg.vue <template> <div> <!--使用ref属性给图片元素命名为imageRef--> <img ref="imageRef" :src="imageSrc" alt="image" > <button @click="cropImage">裁剪图片</button> </div> </template> <script setup> import {ref, onMounted, onBeforeUnmount} from "vue"; import Cropper from 'cropperjs'; import "cropperjs/dist/cropper.css"; const props = defineProps({ //图片地址 imageSrc: { type: String, required: true }, //aspectRatio:置裁剪框为固定的宽高比 aspectRatio: { type: Number, default: 1, }, //viewMode: 视图控制 viewMode: { type: Number, default: 1, }, //autoCropArea: 设置裁剪区域占图片的大小 值为 0-1 默认 0.8 表示 80%的区域 autoCropArea: { type: Number, default: 1, }, }) //绑定图片的dom对象 const imageRef = ref(null) let cropper = null; //使用Cropper构造函数创建裁剪器实例,并将图片元素和一些裁剪选项传入 onMounted(() => { cropper = new Cropper(imageRef.value, { aspectRatio: props.aspectRatio, viewMode: props.viewMode, autoCropArea: props.autoCropArea, }); }); //定义方法 const emit = defineEmits(['updateImageSrc']) //在cropImage函数中,获取裁剪后的图片数据URL,并使用emit方法触发updateImageSrc事件, // 将裁剪后的图片数据URL传递给父组件。 const cropImage = () => { const canvas = cropper.getCroppedCanvas(); const croppedImage = canvas.toDataURL(); emit('updateImageSrc', croppedImage); } //销毁 onBeforeUnmount(()=>{ cropper.destroy() }) </script>
在以上代码中,我们使用props属性,用于传入裁剪器的配置项和需要裁剪的图片地址。在onMounted生命周期钩子中,使用传入的props创建裁剪器实例,并将图片元素和一些裁剪选项传入。
在cropImage函数中,获取裁剪后的图片数据URL,并使用emit方法触发updateImageSrc事件,将裁剪后的图片数据URL传递给父组件。
使用
<template> <cropper-img :imageSrc="imageSrc" @updateImageSrc="updateImageSrc" /> <div> <p>预览图片</p> <img :src="imageNew" alt=""> </div> </template> <script setup> import {reactive, ref,} from "vue"; import CropperImg from "../../components/cropperImg.vue"; const imageSrc = ref('https://cdn.tehub.com/uploads/bCChGvhsbU/u/avatar/a2885f74-5400-48a1-fa93-a0bbdb7bddd6.jpeg?imageView2/1/w/200/h/200/q/100') //定义一个imageNew变量来接收裁剪之后的图片 const imageNew = ref() //点击裁剪按钮 const updateImageSrc = (updateImageSrc) => { imageNew.value = updateImageSrc } </script>
cropperjs配置项
cropperjs文档:cropperjs/README.md at main · fengyuanchen/cropperjs · GitHub
这里列出几个常用的配置项:
viewMode 视图控制
0 无限制
1 限制裁剪框不能超出图片的范围
2 限制裁剪框不能超出图片的范围 且图片填充模式为 cover 最长边填充
3 限制裁剪框不能超出图片的范围 且图片填充模式为 contain 最短边填充
dragMode 拖拽图片模式
crop 形成新的裁剪框
move 图片可移动
none 什么也没有
initialAspectRatio 裁剪框宽高比的初始值 默认与图片宽高比相同 只有在aspectRatio没有设置的情况下可用
aspectRatio 设置裁剪框为固定的宽高比
data 之前存储的裁剪后的数据 在初始化时会自动设置 只有在autoCrop设置为true时可用
preview 预览 设置一个区域容器预览裁剪后的结果
responsive 在窗口尺寸调整后 进行响应式的重渲染 默认true
restore 在窗口尺寸调整后 恢复被裁剪的区域 默认true
checkCrossOrigin 检查图片是否跨域 默认true 如果是 会在被复制的图片元素上加上属性crossOrigin 并且在src上加上一个时间戳 避免重加载图片时因为浏览器缓存而加载错误
checkOrientation 检查图片的方向信息(仅JPEG图片有)默认true 在旋转图片时会对图片方向值做一些处理 以解决IOS设备上的一些问题
modal 是否显示图片和裁剪框之间的黑色蒙版 默认true
guides 是否显示裁剪框的虚线 默认true
center 是否显示裁剪框中间的 ‘+’ 指示器 默认true
highlight 是否显示裁剪框上面的白色蒙版 (很淡)默认true
background 是否在容器内显示网格状的背景 默认true
autoCrop 允许初始化时自动的裁剪图片 配合 data 使用 默认true
autoCropArea 设置裁剪区域占图片的大小 值为 0-1 默认 0.8 表示 80%的区域
movable 是否可以移动图片 默认true
rotatable 是否可以旋转图片 默认true
scalable 是否可以缩放图片(可以改变长宽) 默认true
zoomable 是否可以缩放图片(改变焦距) 默认true
zoomOnTouch 是否可以通过拖拽触摸缩放图片 默认true
zoomOnWheel 是否可以通过鼠标滚轮缩放图片 默认true
wheelZoomRatio 设置鼠标滚轮缩放的灵敏度 默认 0.1
cropBoxMovable 是否可以拖拽裁剪框 默认true
cropBoxResizable 是否可以改变裁剪框的尺寸 默认true
toggleDragModeOnDblclick 是否可以通过双击切换拖拽图片模式(move和crop)默认true 当拖拽图片模式为none时不可切换 该设置必须浏览器支持双击事件
minContainerWidth(200)、minContainerHeight(100)、minCanvasWidth(0)、minCanvasHeight(0)、minCropBoxWidth(0)、minCropBoxHeight(0) 容器、图片、裁剪框的 最小宽高 括号内为默认值 注意 裁剪框的最小高宽是相对与页面而言的 并非相对图片
上一篇: 智能套接字实现 RPC
下一篇: 源代码管理工具 - GitHub
推荐阅读
-
Vue3+cropperjs 实现图像裁剪功能
-
裁剪图像几何变换的 FPGA 实现
-
图像 ISP 功能和实现原理与架构简介 普及
-
如何在 Java 中实现人脸检测功能,以查找图像中的人脸并对其进行标记?
-
在小型应用程序中实现图像识别功能
-
Adobe国际认证中文官方网站】Adobe中国摄影计划,免费安装正版激活--Adobe Creative Cloud中国摄影计划。与此同时,Adobe宣布天猫为Adobe Creative Cloud中国摄影计划的电商战略合作伙伴,并将与其合作上线Adobe天猫官方旗舰店。 此举无疑一方面扩大了Adobe在中国的影响力,另一方面也有助于国内用户更好地培养正版软件意识,推动Adobe软件在中国的正版化进程。 网络异常,图片无法显示 ||网络异常 Adobe Creative Cloud中国摄影计划包括Photoshop和Lightroom Classic两大桌面创意工具,以及iOS版Photoshop Express。 其中,Adobe Lightroom Classic和Adobe Photoshop作为两款常用的图像处理软件,对于那些玩摄影、后期修图的创意设计人群无疑有着巨大的帮助,而LR+PS套装对于摄影领域用户的重要性自不必说,正版产品的性能实时更新也可以放心!体验最新功能,对于新镜头(补偿)和机身(RAW 读取)都能第一时间适应。不信你看: Photoshop 图像合成 裁剪、移除对象、润饰合成照片、玩转色彩和特效,创建精美图片和艺术品! Lightroom Classic 照片编辑 轻松批量管理和编辑照片,内置专业创意控件和摄影师预设,让你的照片大放异彩。 手机 PS 便捷编辑 Photoshop Express 支持多种滤镜、贴纸,手机即可完成抠图、除雾等任务 人工智能编辑工具 神经滤镜、快速点击选区、自动选择主题等人工智能功能让图像编辑更轻松 创意画笔内容识别 定制艺术画笔工具,实现个性化效果;内容识别填充,智能去除无用物体。 Adobe Creative Cloud 中国摄影计划的推出,为中国的专业摄影师、摄影爱好者、后期修图和其他创意设计人员带来了全方位的内容和体验。 网络异常,图片无法显示 ||网络异常 当然,不可否认的是,"由于盗版软件缺乏开发、维护和升级成本,销售价格远低于正版软件。再加上很多普通人并不需要使用正版软件的复杂功能,版权观念较淡,还是有大量的创意设计人员会选择盗版软件"。 但事实上,当所有的软件都不再是单一的软件,而是变成一种服务时,单机版盗版的存在就逐渐成为鸡肋。因为有太多的服务让你即使是所谓的 "完美破解",也无法享受,Adobe Cloud 就是一个很好的例子,所谓的完美破解,你只能使用 "Adobe "的一半,对于更精彩的 "云",只能望云兴叹。更何况,越来越多的设计工具从免费走向付费,越来越多的设计师和企业已经接受了付费使用的模式。 其次,对于互联网时代的企业数字化转型而言,数字化合规至关重要。21年来,使用盗版PS和未经授权的方正字体被指侵权的事情闹得沸沸扬扬,虽然新闻真假难辨,但也给使用盗版工具的用户敲响了警钟。 付费使用正版工具,可以更放心地进行设计,不用担心版权风险!
-
jquery 实现点击弹出层中的缩略图以显示原始图像的功能
-
集成本地存储和阿里云开放源码软件的 React+node 图像裁剪和上传功能
-
轻松运用AnalyticDB,快速实现图像相似搜索与人脸识别功能
-
试试云开发的扩展功能,如何轻松实现图像盲水印的3个步骤?