vue 實現(xiàn)網(wǎng)頁截圖功能詳解
最近項目有一個需求,需要上傳圖片,但是客戶上傳的圖片大小不一,所以我們需要規(guī)定客戶的圖片比例,但又需要是客戶所需的,所以就想到了截圖
實現(xiàn)效果
我們的架構(gòu)是vue,所以用的是一個vue的截圖插件
安裝插件:npm install vue-cropper --save-dev
引入組件
import Vue from 'vue'; import { VueCropper } from "vue-cropper"; Vue.use(VueCropper)
核心代碼
<div> <span class="spanStyle">產(chǎn)品圖片:</span> <!--整個圖片預(yù)覽的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>
預(yù)覽的方法
data (){ return{ headImg:'', //剪切圖片上傳 crap: false, previews: {}, option: { img: '', outputSize:1, //剪切后的圖片質(zhì)量(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:'', //上傳后的圖片的地址(不帶服務(wù)器域名) } }, methods:{ // 實時預(yù)覽函數(shù) 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轉(zhuǎn)化為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 } } // // 轉(zhuǎn)化為blob reader.readAsArrayBuffer(file); } }
然后我們要獲取截取完之后的圖片,是通過Cropper的回調(diào)函數(shù)來獲取它的圖片,這里我們獲取的是我們轉(zhuǎn)為blob格式的圖片(不轉(zhuǎn)顯示不了)
這邊是因為后臺就是用file類型接收的,所以我需要再把blob轉(zhuǎn)為file,然后才用formData上傳文件
productAdd(){ this.$refs.cropper.getCropBlob((data) => { //這個data就是我們截取后的blob圖片 let formData = new FormData(); //獲取文件名,因為在轉(zhuǎn)成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) }) }) }) }
實際運用到自己的項目中還需改動,比如編輯圖片還需回顯,上傳多張剪切的圖片等等…
以上就是vue 實現(xiàn)網(wǎng)頁截圖功能詳解的詳細內(nèi)容,更多關(guān)于vue 網(wǎng)頁截圖的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue中的v-model,v-bind,v-on的區(qū)別解析
vue.js是一套構(gòu)建用戶界面的框架,只關(guān)注視圖層,它不僅易于上手,還便于與第三方庫或既有項目整合,vue.js有配套的第三方類庫,可以整合起來做大型項目的開發(fā),這篇文章主要介紹了v-model,v-bind,v-on的區(qū)別,需要的朋友可以參考下2022-12-12vue-manage-system升級到vue3的開發(fā)總結(jié)分析
這篇文章主要為大家介紹了vue-manage-system升級到vue3的開發(fā)總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09element-plus中如何實現(xiàn)按需導入與全局導入
本文主要介紹了element-plus中如何實現(xiàn)按需導入與全局導入,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11vue中element-ui組件默認css樣式修改的四種方式
在前端項目中會運用各種組件,有時組件的默認樣式并不是你項目中所需要的,你需要更改樣式,下面這篇文章主要給大家介紹了關(guān)于vue中element-ui組件默認css樣式修改的四種方式,需要的朋友可以參考下2021-10-10