基于Vue怎样写一个网页截图的功能,代码是什么
Admin 2022-06-17 群英技术资讯 256 次浏览
最近项目有一个需求,需要上传图片,但是客户上传的图片大小不一,所以我们需要规定客户的图片比例,但又需要是客户所需的,所以就想到了截图
实现效果
我们的架构是vue,所以用的是一个vue的截图插件
安装插件:npm install vue-cropper --save-dev
引入组件
import Vue from 'vue'; import { VueCropper } from "vue-cropper"; Vue.use(VueCropper)
核心代码
<div> <span class="spanStyle">产品图片:</span> <!--整个图片预览的div--> <div style="display:flex;padding-left: 300px;"> <div class="info-item" style="flex:1;margin-left:-160px;margin-top: -25px"> <label class="btn btn-orange theme-bg-gray theme-white w90" for="uploads" style="display:inline-block;width: 70px;padding: 0;text-align: center;line-height: 28px;" >选择图片</label> <input type="file" id="uploads" :value="imgFile" style="position:absolute; clip:rect(0 0 0 0);" accept="image/png, image/jpeg, image/gif, image/jpg" @change="uploadImg($event, 1)"> <div class="line" style="margin-left: -280px;margin-top: 85px;"> <div class="cropper-content" style="margin-top:-60px;margin-left:160px;"> <div class="cropper"> <vueCropper ref="cropper" :img="option.img" :outputSize="option.size" :outputType="option.outputType" :info="true" :full="option.full" :canMove="option.canMove" :canMoveBox="option.canMoveBox" :original="option.original" :autoCrop="option.autoCrop" :autoCropWidth="option.autoCropWidth" :autoCropHeight="option.autoCropHeight" :fixedBox="option.fixedBox" @realTime="realTime" ></vueCropper> </div> <!--截取完的图片展示div--> <div style="margin-left:700px;"> <div class="show-preview" :style="{'width': '300px', 'height':'150px', 'overflow': 'hidden', 'margin-left': '-650px'}"> <div :style="previews.div" > <img :src="previews.url" :style="previews.img"> </div> </div> </div> </div> </div> </div> </div> </div>
预览的方法
data (){ return{ headImg:'', //剪切图片上传 crap: false, previews: {}, option: { img: '', outputSize:1, //剪切后的图片质量(0.1-1) full: false,//输出原图比例截图 props名full outputType: 'png', canMove: true, original: false, canMoveBox: true, autoCrop: true, autoCropWidth: 300, autoCropHeight: 150, fixedBox: true }, fileName:'', //本机文件地址 downImg: '#', imgFile:'', uploadImgRelaPath:'', //上传后的图片的地址(不带服务器域名) } }, methods:{ // 实时预览函数 realTime(data) { console.log('realTime') this.previews = data }, //选择本地图片 uploadImg(e, num) { console.log('uploadImg'); var _this = this; //上传图片 var file = e.target.files[0] _this.fileName = file.name; if (!/\.(gif|jpg|jpeg|png|bmp|GIF|JPG|PNG)$/.test(e.target.value)) { alert('图片类型必须是.gif,jpeg,jpg,png,bmp中的一种') return false } var reader = new FileReader(); reader.onload =(e) => { let data; if (typeof e.target.result === 'object') { // 把Array Buffer转化为blob 如果是base64不需要 data = window.URL.createObjectURL(new Blob([e.target.result])) } else { data = e.target.result } if (num === 1) { _this.option.img = data } else if (num === 2) { _this.example2.img = data } } // // 转化为blob reader.readAsArrayBuffer(file); } }
然后我们要获取截取完之后的图片,是通过Cropper的回调函数来获取它的图片,这里我们获取的是我们转为blob格式的图片(不转显示不了)
这边是因为后台就是用file类型接收的,所以我需要再把blob转为file,然后才用formData上传文件
productAdd(){ this.$refs.cropper.getCropBlob((data) => { //这个data就是我们截取后的blob图片 let formData = new FormData(); //获取文件名,因为在转成file里面不能用this.所以需要用一个变量来赋值 var name=this.fileName var file = new File([data], name, {type: data.type, lastModified: Date.now()}); formData.append("files",file) new Promise((resolve, reject) => { productAdd(formData).then(response => { if (response.code == 20000) { Dialog.alert({ title: '提示', message: '保存成功!' }).then(() => { this.back('/productInfo') }); } }).catch(error => { reject(error) }) }) }) }
实际运用到自己的项目中还需改动,比如编辑图片还需回显,上传多张剪切的图片等等…
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章我们来了解用jQuery如何获取ul下li的个数,下文示例对新手学习jQuery有一定的参考价值,有这方面学习需要的朋友接下来就跟随小编来一起学习一下吧!
这篇文章主要为大家详细介绍了Vue.js框架实现购物车功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要介绍了filter() 数组过滤的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇文章给大家分享的是jQuery设置修改z-index的值的方法。在jQuery中,我们可以使用css()或attr()方法来修改元素的值,文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。
这篇文章主要介绍了react常用的基础知识总结,帮助大家更好的理解和学习使用react框架,感兴趣的朋友可以了解下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008