Dieses Mal werde ich Ihnen die Implementierung der Funktion zum Zuschneiden und Hochladen von Bildern vorstellen. Was sind die Vorsichtsmaßnahmen für die Implementierung der Funktion zum Zuschneiden und Hochladen von Bildern?
Ich habe vor ein paar Tagen ein Projekt über das Vue-Projekt gemacht, das die Funktion zum Zuschneiden und Hochladen von Avataren benötigt. Ich habe einen Artikel gelesen und darauf basierende Änderungen vorgenommen, um diese Funktion zu vervollständigen Du. Originaltext: http://www.jb51.net/article/135719.htm
Laden Sie zuerst Cropper js herunter und importieren Sie es,
npm install cropper js --save
Führen Sie es auf der erforderlichen Seite ein: import Cropper from "cropper js"
HTML lautet wie folgt:
<template> <p id="demo"> <!-- 遮罩层 --> <p class="container" v-show="panel"> <p> <img id="image" :src="url" alt="Picture"> </p> <button type="button" id="button" @click="commit">确定</button> <button type="button"id="cancel" @click="cancel">取消</button> </p> <p style="padding:20px;"> <p class="show"> <p class="picture" :style="'backgroundImage:url('+headerImage+')'"> </p> </p> <p style="margin-top:20px;text-align: left;"> <input type="file" id="change" accept="image" @change="change"> <label for="change"></label> </p> </p> </p> </template>
Hauptsächlich js-Code, wie folgt
1. Legen Sie die Anfangsvariablen in Daten fest und binden Sie die Daten was ich definiert habe, um das Bildformat zu bestimmen.
data() { return { headerImage: "", picValue: "", cropper: "", croppable: false, panel: false, url: "", imgCropperData: { accept: "image/gif, image/jpeg, image/png, image/jpg" } }; }
2. Ändern Sie zunächst den Zuschneiderahmen im montierten Zustand
mounted() { //初始化这个裁剪框 var self = this; var image = document.getElementById("image"); this.cropper = new Cropper(image, { aspectRatio: 1, viewMode: 1, background: false, zoomable: false, ready: function() { self.croppable = true; } }); }
3. Es gibt viele Methoden, darunter das Erstellen eines URL-Pfads, das Ändern des Eingabefelds, das Zeichnen der Leinwand und das Bestätigen der Übermittlung Hochladen. Ich habe außerdem eine Abbruchereignisfunktion hinzugefügt, um den Typ und die Größe der hochgeladenen Datei zu bestimmen.
methods: { //取消上传 cancel() { this.panel = false; var obj = document.getElementById('change') ; obj.outerHTML=obj.outerHTML; }, //创建url路径 getObjectURL(file) { var url = null; if (window.createObjectURL != undefined) { // basic url = window.createObjectURL(file); } else if (window.URL != undefined) { // mozilla(firefox) url = window.URL.createObjectURL(file); } else if (window.webkitURL != undefined) { // webkit or chrome url = window.webkitURL.createObjectURL(file); } return url; }, //input框change事件,获取到上传的文件 change(e) { let files = e.target.files || e.dataTransfer.files; if (!files.length) return; let type = files[0].type; //文件的类型,判断是否是图片 let size = files[0].size; //文件的大小,判断图片的大小 if (this.imgCropperData.accept.indexOf(type) == -1) { alert("请选择我们支持的图片格式!"); return false; } if (size > 5242880) { alert("请选择5M以内的图片!"); return false; } this.picValue = files[0]; this.url = this.getObjectURL(this.picValue); //每次替换图片要重新得到新的url if (this.cropper) { this.cropper.replace(this.url); } this.panel = true; }, //确定提交 commit() { this.panel = false; var croppedCanvas; var roundedCanvas; if (!this.croppable) { return; } // Crop croppedCanvas = this.cropper.getCroppedCanvas(); // Round roundedCanvas = this.getRoundedCanvas(croppedCanvas); this.headerImage = roundedCanvas.toDataURL(); //上传图片 this.postImg(); }, //canvas画图 getRoundedCanvas(sourceCanvas) { var canvas = document.createElement("canvas"); var context = canvas.getContext("2d"); var width = sourceCanvas.width; var height = sourceCanvas.height; canvas.width = width; canvas.height = height; context.imageSmoothingEnabled = true; context.drawImage(sourceCanvas, 0, 0, width, height); context.globalCompositeOperation = "destination-in"; context.beginPath(); context.arc( width / 2, height / 2, Math.min(width, height) / 2, 0, 2 * Math.PI, true ); context.fill(); return canvas; }, //提交上传函数 postImg() { alert("上传成功"); //这边写图片的上传 } }
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website.
Empfohlene Lektüre:
So implementieren Sie eine Back-Force-Aktualisierung auf der WeChat-Webseite
So verwenden Sie das React BootStrap-Framework
React Native verwendet Fetch zum Hochladen von Bildern
So verkleinern Sie die von Webpack gepackten Dateien nach der Komprimierung
Das obige ist der detaillierte Inhalt vonImplementierung der Funktion zum Zuschneiden und Hochladen von Bildern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!