<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了vue專案新增圖片裁剪元件的具體程式碼,供大家參考,具體內容如下
功能如下圖所示:
1、安裝命令如下
npm i vue-cropper --save
2、呼叫元件,引入vue-cropper
import { VueCropper } from 「vue-cropper」;
3、封裝元件程式碼如下:cropper.vue
<template> <div class="cropper_model"> <el-dialog title="圖片剪裁" width="800px" class="cropper_model_dlg" :visible.sync="dialogVisible" append-to-body :close-on-click-modal="false" :close-on-press-escape="false" > <div class="cropper_content"> <div class="cropper" style="text-align: center;"> <vueCropper ref="cropper" :img="options.img" :outputSize="options.outputSize" :outputType="options.outputType" :info="options.info" :canScale="options.canScale" :autoCrop="options.autoCrop" :autoCropWidth="options.autoCropWidth" :autoCropHeight="options.autoCropHeight" :fixed="options.fixed" :fixedBox="options.fixedBox" :fixedNumber="options.fixedNumber" @realTime="previewImg" > </vueCropper> <div class="cropper_btns"> <el-button type="primary" @click="goUpload" size="mini"> 重新上傳 </el-button> <el-button @click="rotateLeft" icon="el-icon-refresh-left" size="mini" title="左旋轉" > </el-button> <el-button @click="rotateRight" icon="el-icon-refresh-right" size="mini" title="右旋轉" > </el-button> <el-button @click="changeScale(1)" size="mini" title="放大"> + </el-button> <el-button @click="changeScale(-1)" size="mini" title="縮小"> - </el-button> </div> </div> <div class="cropper_right"> <h3>預覽</h3> <!-- 預覽 --> <div class="cropper_preview" :style="{ width: preview.w + 'px', height: preview.h + 'px', overflow: 'hidden', margin: '5px' }" > <div :style="preview.div"> <img :src="preview.url" :style="preview.img" alt="" /> </div> </div> <div style="margin-top: 100px;"> <el-button type="primary" @click="uploadImg" :loading="loading"> 確定上傳 </el-button> </div> </div> </div> <!-- <div slot="footer" class="dialog-footer"> <el-button @click="downLoad('blob')">下載</el-button> <el-button @click="dialogVisible = false">取消</el-button> <el-button type="primary" @click="uploadImg" :loading="loading"> 確認 </el-button> </div> --> </el-dialog> </div> </template> <script> import { VueCropper } from "vue-cropper"; export default { components: { VueCropper }, data() { return { dialogVisible: false, loading: false, options: { img: "", // 裁剪圖片的地址 outputSize: 1, // 裁剪生成圖片的質量 outputType: "png", // 裁剪生成圖片的格式 info: true, // 裁剪框的大小資訊 canScale: true, // 圖片是否允許捲動縮放 autoCrop: true, // 是否預設生成截圖狂 autoCropWidth: 100, // 預設生成截圖框寬度 autoCropHeight: 100, // 預設生成截圖框高度 fixed: true, // 是否開啟截圖框寬高固定比例 fixedNumber: [1, 1], // 截圖框的寬高比例 full: true, // 是否輸出原圖比例的截圖 fixedBox: true, // 固定截圖框大小 不允許改變 canMove: true, // 上傳圖片是否可以移動 canMoveBox: true, // 截圖框能否拖動 original: true, // 上傳圖片按照原始比例渲染 centerBox: false, // 截圖框是否被限制在圖片裡面 high: false, // 是否按照裝置的dpr輸出等比例圖片 infoTrue: true, // true為展示真實輸出圖片寬高false展示看到的截圖框寬高 maximgSize: 100, // 限制圖片最大寬度和高度 enlarge: 1, // 圖片根據截圖框輸出比例倍數 mode: "contain" // 圖片預設渲染方式(contain, cover, 100px, 100% auto) }, preview: {} }; }, methods: { open(data) { this.options.img = window.URL.createObjectURL(data); this.dialogVisible = true; }, close(){ this.dialogVisible = false; }, // base64轉圖片檔案 dataURLtoFile(dataurl, filename) { let arr = dataurl.split(","); let mime = arr[0].match(/:(.*?);/)[1]; let bstr = atob(arr[1]); let len = bstr.length; let u8arr = new Uint8Array(len); while (len--) { u8arr[len] = bstr.charCodeAt(len); } return new File([u8arr], filename, { type: mime }); }, downLoad(type) { event.preventDefault(); const aLink = document.createElement("a"); if (type === "blob") { this.$refs.cropper.getCropBlob(data => { let downImg = window.URL.createObjectURL(data); aLink.download = "photo.png"; aLink.href = downImg; aLink.click(); }); } else { this.$refs.cropper.getCropData(data => { let file = this.dataURLtoFile(data, "test"); aLink.href = file; aLink.click(); }); } }, // 左旋轉 rotateLeft() { this.$refs.cropper.rotateLeft(); }, // 右旋轉 rotateRight() { this.$refs.cropper.rotateRight(); }, // 放大縮小 changeScale(num) { num = num || 1; this.$refs.cropper.changeScale(num); }, // 實時預覽 previewImg(data) { this.preview = data; }, goUpload() { this.$emit("upAgain"); }, // 上傳圖片 uploadImg() { let self = this; self.loading = true; this.$refs.cropper.getCropData(data => { let file = this.dataURLtoFile(data, "photo.png"); // 生成檔案型別 self.loading = false; this.$emit("getFile",file) }); }, //自定義上傳,裁剪後呼叫 } }; </script> <style lang="less" scoped> .cropper_model_dlg { .cropper_content { margin: 0 auto; width: 700px; height: 450px; display: flex; justify-content: space-between; align-items: flex-start; } .cropper { width: 400px; height: 400px; background: yellow; } .cropper_right { width: 300px; text-align: center; } .cropper_preview { margin: 0 auto; display: inline-block; border: 1px solid #ddd; } .cropper_btns { margin-top: 20px; } } </style>
4、在其他vue元件使用,參照cropper.vue
import MyCropper from "./cropper.vue"
export default裡面新增
components:{MyCropper},
html中引入
<my-cropper ref="myCropper" @getFile="getFile" @upAgain="upAgain"></my-cropper>
對應的js方法程式碼
upAgain(){ this.$refs['upload'].$refs["upload-inner"].handleClick(); }, getFile(file){ const formData = new FormData(); formData.append("file",file) uploadSelfCompanyLogo(formData).then(res =>{ if (res.code === 0) { this.companyInfo.logo = res.filename; this.companyInfo.imageUrl = res.url; this.imageUrl = res.url; //上傳成功後,關閉彈框元件 // this.handleCrop(file); this.$refs.myCropper.close() } else { this.$message.error('上傳出錯'); } }) // this.$refs.upload.submit(); },
注意:以上程式碼並不完整, 裁剪元件和elementUI元件中的el-upload的結合使用方法如連結裁剪元件和el-uplod結合
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45