vue-cropper裁剪图片 vue

效果图

1.配置环境

npm install vue-cropper

2.代码

<template><div class="cropper-content"><div class="cropper-box"><div class="cropper"><vue-cropper ref="cropper" :img="option.img" :outputSize="option.outputSize" :outputType="option.outputType":info="option.info" :canScale="option.canScale" :autoCrop="option.autoCrop":autoCropWidth="option.autoCropWidth" :autoCropHeight="option.autoCropHeight" :fixed="option.fixed":fixedNumber="option.fixedNumber" :full="option.full" :fixedBox="option.fixedBox" :canMove="option.canMove":canMoveBox="option.canMoveBox" :original="option.original" :centerBox="option.centerBox":height="option.height" :infoTrue="option.infoTrue" :maxImgSize="option.maxImgSize" :enlarge="option.enlarge":mode="option.mode" @realTime="realTime" @imgLoad="imgLoad"></vue-cropper></div><!--底部操作工具按钮--><div class="footer-btn"><div class="scope-btn"><label class="btn" for="uploads">选择图片</label><input type="file" id="uploads" style="position:absolute; clip:rect(0 0 0 0);"accept="image/png, image/jpeg, image/gif, image/jpg" @change="selectImg($event)"><el-button size="mini" type="danger" plain icon="el-icon-zoom-in" @click="changeScale(1)">放大</el-button><el-button size="mini" type="danger" plain icon="el-icon-zoom-out" @click="changeScale(-1)">缩小</el-button><el-button size="mini" type="danger" plain @click="rotateLeft">↺ 左旋转</el-button><el-button size="mini" type="danger" plain @click="rotateRight">↻ 右旋转</el-button></div><div class="upload-btn"><el-button size="mini" type="success" @click="uploadImg('blob')">裁剪完毕 <i class="el-icon-upload"></i></el-button></div></div></div><!--预览效果图--><div class="show-preview"><div :style="previews.div" class="preview"><img :src="previews.url" :style="previews.img"></div></div></div>
</template><script>import {VueCropper} from 'vue-cropper'export default {name: "CropperImage",components: {VueCropper},props: ['Name'],data() {return {name: this.Name,previews: {},option: {img: '', //裁剪图片的地址outputSize: 1, //裁剪生成图片的质量(可选0.1 - 1)outputType: 'jpeg', //裁剪生成图片的格式(jpeg || png || webp)info: true, //图片大小信息canScale: true, //图片是否允许滚轮缩放autoCrop: true, //是否默认生成截图框autoCropWidth: 160, //默认生成截图框宽度autoCropHeight: 90, //默认生成截图框高度fixed: true, //是否开启截图框宽高固定比例fixedNumber: [1.77777, 1], //截图框的宽高比例full: false, //false按原比例裁切图片,不失真fixedBox: true, //固定截图框大小,不允许改变canMove: false, //上传图片是否可以移动canMoveBox: true, //截图框能否拖动original: false, //上传图片按照原始比例渲染centerBox: false, //截图框是否被限制在图片里面height: true, //是否按照设备的dpr 输出等比例图片infoTrue: false, //true为展示真实输出图片宽高,false展示看到的截图框宽高maxImgSize: 3000, //限制图片最大宽度和高度enlarge: 1, //图片根据截图框输出比例倍数mode: '100%' //图片默认渲染方式}};},methods: {//初始化函数imgLoad(msg) {console.log("工具初始化函数=====" + msg)},//图片缩放changeScale(num) {num = num || 1this.$refs.cropper.changeScale(num)},//向左旋转rotateLeft() {this.$refs.cropper.rotateLeft()},//向右旋转rotateRight() {this.$refs.cropper.rotateRight()},//实时预览函数realTime(data) {// console.log('实时预览图片的data:' + data);// console.log(data);this.previews = data},//选择图片selectImg(e) {let file = e.target.files[0]if (!/\.(jpg|jpeg|png|JPG|PNG)$/.test(e.target.value)) {this.$message({message: '图片类型要求:jpeg、jpg、png',type: "error"});return false}//转化为bloblet reader = new FileReader()reader.onload = (e) => {let dataif (typeof e.target.result === 'object') {data = window.URL.createObjectURL(new Blob([e.target.result]))} else {data = e.target.result}this.option.img = data //将创建的blob图片链接保存到数据里面,跟正常图片一样}//转化为base64reader.readAsDataURL(file)},//上传图片uploadImg(type) {let _this = this;if (type === 'blob') {//获取截图的blob数据this.$refs.cropper.getCropBlob((file) => {//得到裁剪以后的图片文件,方便使用this.$refs.cropper.getCropData((base64) => {//得到裁剪以后的base64图片,方便使用alert('裁剪完毕,请看代码里面的uploadImg函数里面教你的使用方法,懒狗记得看')            //如果你想使用file二进制文件上传!那么请用11111111里面的代码,尤其是formData这样的上传格式,否则上传失败//1111111111111111111111111111111111111111111111111111111111111111111111111// let formData = new FormData();// formData.append('file',data,"DX.jpg")// let {data: res} = await _this.$http.post('/api/file/imgUpload', formData)//1111111111111111111111111111111111111111111111111111111111111111111111111111//如果你用base64那用请用22222222//2222222222222222222222222222222222222222222222222222222222222222222//就正常post上传就行,这样都不会啊//22222222222222222222222222222222222222222222222222222222222222222})})}},},}
</script><style scoped lang="less">.cropper-content {display: flex;display: -webkit-flex;justify-content: flex-end;.cropper-box {flex: 1;width: 100%;.cropper {width: auto;height: 300px;}}.show-preview {flex: 1;-webkit-flex: 1;display: flex;display: -webkit-flex;justify-content: center;.preview {overflow: hidden;border: 1px solid #67c23a;background: #cccccc;}}}.footer-btn {margin-top: 30px;display: flex;display: -webkit-flex;justify-content: flex-end;.scope-btn {display: flex;display: -webkit-flex;justify-content: space-between;padding-right: 10px;}.upload-btn {flex: 1;-webkit-flex: 1;display: flex;display: -webkit-flex;justify-content: center;}.btn {outline: none;display: inline-block;line-height: 1;white-space: nowrap;cursor: pointer;-webkit-appearance: none;text-align: center;-webkit-box-sizing: border-box;box-sizing: border-box;outline: 0;-webkit-transition: .1s;transition: .1s;font-weight: 500;padding: 8px 15px;font-size: 12px;border-radius: 3px;color: #fff;background-color: #409EFF;border-color: #409EFF;margin-right: 10px;}}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/701276.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言中数组与指针的区别

一. 简介 本文学习了 C语言中数组与指针的区别。这样的话&#xff0c;可以在编写C代码时规避掉出错的问题。 二. C语言中数组与指针的区别 1. 数组 定义字符串数组时&#xff0c;必须让编译器知道需要多少空间。 一种方法是用足够空间的数组存储字符串。例如如下&#xf…

【Vue】更换vue-element-admin左侧 logo

准备&#xff1a;目标svg格式的 logo&#xff0c;并将目标logo命名为 vuejs-fill.svg替换路径&#xff1a;/icons 文件夹下&#xff0c;覆盖掉原本的 vuejs-fill.svg 原因&#xff1a;配置项的logo设置的是 vuejs-fill

Linux中如何配置虚拟机网络(NAT方法)

首先我们要在Linux中找到配置文件的路径/etc/sysconfig/network-scripts/&#xff0c;然后找到配置文件的名称ifcfg-xxx&#xff08;如&#xff1a;ifcfg-ens33&#xff09;&#xff0c;然后打开这个文件内 容如下&#xff1a; TYPEEthernet # 指定网卡类型是以太网 BOOTPROT…

【ARM Cortex-M 系列 2.3 -- Cortex-M7 Debug event 详细介绍】

请阅读【嵌入式开发学习必备专栏】 文章目录 Cortex-M7 Debug eventDebug events Cortex-M7 Debug event 在ARM Cortex-M7架构中&#xff0c;调试事件&#xff08;Debug Event&#xff09;是由于调试原因而触发的事件。一个调试事件会导致以下几种情况之一发生&#xff1a; 进…

高级DBA手把手教你达梦8国产数据库级联更新语句用MergeInto合并代替方法(达梦官方手册无此内容)

高级DBA手把手教你达梦8国产数据库级联更新语句用MergeInto合并代替方法&#xff08;达梦官方手册无此内容&#xff09; 一、传统级联更新语句例子 举例&#xff1a; 表 1&#xff1a;T1 字段名类型A时间类型B字符类型C字符类型D字符类型E字符类型 表 2&#xff1a;T2 字…

Web开发三层架构

##Controller Service Dao(mapper) 软件设计&#xff1a;高内聚 低耦合 Controller 调用Service&#xff0c; Service调用 DAO 模块之间耦合 如果要从EmpServiceA切换到EmpServiceB&#xff0c;Controller代码也要修改 new EmpServiceB 分层接耦 容器中放EmpServiceA&am…

Transformer+Classification学习笔记

论文名称&#xff1a;An Image is Worth 16x16 Words:Transformers for Image Recognition at Scale [2112.11010] MPViT: Multi-Path Vision Transformer for Dense Prediction (arxiv.org) 参考博客与视频&#xff1a; Vision Transformer 超详细解读 (原理分析代码解读) …

H5 云商城 file.php 文件上传致RCE漏洞复现

0x01 产品简介 H5 云商城是一个基于 H5 技术的电子商务平台,旨在为用户提供方便快捷的在线购物体验。多平台适配:H5 云商城采用 H5 技术开发,具有良好的跨平台适配性。无论是在电脑、手机还是平板等设备上,用户都可以通过网页浏览器访问和使用云商城,无需安装额外的应用程…

WMS仓储管理系统如何让仓库管理有过程

在当今竞争激烈的商业环境中&#xff0c;WMS仓储管理系统的智能化与过程化管理显得尤为重要。一个具有过程管理的WMS仓储管理系统不仅能够帮助企业实时监控、分析和调度仓库作业&#xff0c;还能显著提升作业效率和成本控制能力。下面&#xff0c;我们就来深入探讨一下这种“有…

2024-05-10 Ubuntu上面使用libyuv,用于转换、缩放、旋转和其他操作YUV图像数据,测试实例使用I420ToRGB24

一、简介&#xff1a;libyuv 最初是由Google开发的&#xff0c;主要是为了支持WebRTC项目中的视频处理需求。用于处理YUV格式图像数据的开源库。它提供了一系列的函数&#xff0c;用于转换、缩放、旋转和其他操作YUV图像数据。 二、执行下面的命令下载和安装libyuv。 git clo…

windows 使用 workerman

简单示例 workerman从3.5.3版本开始已经能够同时支持linux系统和windows系统。 1、需要PHP>5.4&#xff0c;并配置好PHP的环境变量。 2、Windows版本的Workerman不依赖任何扩展。 3、安装使用以及使用限制这里。 4、由于Workerman在Windows下有诸多使用限制&#xff0c…

前端崽的java study笔记

文章目录 basic1、sprint boot概述2、sprint boot入门3、yml 配置信息书写和获取 持续更新ing~ basic 1、sprint boot概述 sprint boot特性&#xff1a; 起步依赖&#xff08;maven坐标&#xff09;&#xff1a;解决配置繁琐的问题&#xff0c;只需要引入sprint boot起步依赖的…