Offizielle Website: https://github.com/xyxiao001/vue-cropper 1. Installation:npm installiere vue-cropper oder Garn hinzufügen Vue-Cropper 2. Verwendung:Importiere VueCropper von „vue-cropper“ Richten Sie Standard exportieren { Komponenten: VueCropper } } In <vueCropper ref="Beschneider" :img="Option.img" :Ausgabegröße="Option.Größe" :Ausgabetyp="Option.Ausgabetyp" ></vueCropper> Daten(){ zurückkehren { Option:{ img: 'imgUrl', // URL oder Base64 von img Größe: 1, Ausgabetyp: "png", } } } 3. Integrierte Methoden:
Integrierte Methode : Rufen Sie das Plugin über // Holen Sie sich die Base64-Daten des Screenshots this.$refs.cropper.getCropData((data) => { // etwas tun console.log(Daten) }) // Holen Sie sich die Screenshot-Blob-Daten this.$refs.cropper.getCropBlob((data) => { // etwas tun console.log(Daten) }) 4. Verwendung:<Vorlage> <div> <el-dialog title="Bild zuschneiden" :visible.sync="show" append-to-body width="950px" center> <div Klasse="cropper-content"> <div Klasse="cropper-box"> <div Klasse="cropper"> <vue-cropper ref = "cropper": img = "option.img": outputSize = "option.outputSize": outputType = "option.outputType": info = "option.info": canscale = "option.canscale": autocropight "optimal.: autocropwith": autocropwid = "option": autocropwid = "option": autocropwid = "option": autocropwid = "option": autocropwid = "option": autocropwid = "option": autocropwid = "option": autocropwid = "option": autocropwid = "option: = "Option.Fixed": FixedNumber = "Option.FixedNumber": full = "option.full": fixedbox = "option.fixedBox": canmove = "option.canmove": canMoveBox AximgSize ": enlarge =" option.enlarge ": modus =" option.mode " @realtime =" realtime " @imgload =" imgload "> </vue-cropper> </div> <!--Untere Schaltfläche für Bedienwerkzeug--> <div Klasse="footer-btn"> <div Klasse="scope-btn"> <label class="btn" for="uploads">Wählen Sie ein Bild aus</label> <input type="file" id="uploads" style="position:absolute; clip:rect(0 0 0 0);" akzeptieren="bild/png, bild/jpeg, bild/gif, bild/jpg" @change="selectImg($event)"> <el-button size="mini" type="danger" plain icon="el-icon-zoom-in" @click="changeScale(1)">Vergrößern</el-button> <el-button size="mini" type="danger" plain icon="el-icon-zoom-out" @click="changeScale(-1)">Verkleinern</el-button> <el-button size="mini" type="danger" plain @click="rotateLeft">↺ Nach links drehen</el-button> <el-button size="mini" type="danger" plain @click="rotateRight">↻ Nach rechts drehen</el-button> </div> <div Klasse="upload-btn"> <el-button size="mini" type="success" @click="uploadImg('blob')">Bild hochladen<i class="el-icon-upload"></i></el-button> </div> </div> </div> <!--Effektbild-Vorschau--> <div Klasse="Vorschau anzeigen"> <div :style="Vorschau.div" class="Vorschau"> <img :src="vorschau.url" :style="vorschau.img"> </div> </div> </div> </el-dialog> </div> </Vorlage> <Skript> importiere { VueCropper } von 'vue-cropper' Standard exportieren { Name: "CropperImage", Komponenten: VueCropper }, Daten () { zurückkehren { anzeigen: this.visible, Name: dieser.Name, Vorschau: {}, Option: { img: '', //Adresse des zugeschnittenen Bildes outputSize: 1, //Qualität des zugeschnittenen Bildes (optional 0,1 - 1) Ausgabetyp: „jpeg“, //zuschneiden, um das Bildformat zu generieren (jpeg || png || webp) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers ::::::::::: }; }, Requisiten: { sichtbar: Typ: Boolean, Standard: false }, Name: Typ: Zeichenfolge, Standard: '' } }, betrachten: sichtbar () { dies.zeigen = dies.sichtbar } }, Methoden: { // Initialisierungsfunktion imgLoad (msg) { }, //Bildskalierung changeScale (num) { Zahl = Zahl || 1 dies.$refs.cropper.changeScale(num) }, //Nach links drehen rotateLeft () { dies.$refs.cropper.rotateLeft() }, //Nach rechts drehen rotateRight () { dies.$refs.cropper.rotateRight() }, //Echtzeit-Vorschau-Funktion realTime (data) { this.previews = Daten }, //Wähle ein Bild aus selectImg (e) { let Datei = e.Zieldateien[0] wenn (!/\.(jpg|jpeg|png|JPG|PNG)$/.test(e.ziel.wert)) { diese.$nachricht({ Meldung: „Anforderungen an Bildtypen: jpeg, jpg, png“, Typ: „Fehler“ }); return false } //In Blob konvertieren let reader = neuer FileReader() reader.onload = (e) => { Daten lassen wenn (Typ von e.Ziel.Ergebnis === 'Objekt') { Daten = Fenster.URL.createObjectURL(neuer Blob([e.target.result])) } anders { Daten = e.Ziel.Ergebnis } diese.option.img = Daten } //In Base64 konvertieren reader.readAsDataURL(Datei) }, //Bild hochladen uploadImg (Typ) { lass _dies = dies wenn (Typ === 'Blob') { // Holen Sie sich die Screenshot-Blob-Daten this.$refs.cropper.getCropBlob(async (data) => { let formData = neue FormData(); formData.append('Datei', Daten, neues Datum().getTime() + '.png') // Rufen Sie axios zum Hochladen auf let { data: res } = await _this.$http.post(`${msBaseUrl}common-tools-web/file/upload/image`, formData) wenn (res.code === 200) { _diese.$nachricht({ Nachricht: res.desc, Typ: „Erfolg“ }); let data = res.result let imgInfo = { Name: Datenname, ID: Daten-ID, URL: Daten.URL }; _this.$emit('uploadImgSuccess', imgInfo); } anders { _diese.$nachricht({ Meldung: ,,Fehler beim Dateidienst, bitte kontaktieren Sie den Administrator!‘‘ ', Typ: „Fehler“ }) } }) } } } } </Skript> <style scoped lang="weniger"> .cropper-Inhalt { Anzeige: Flex; Anzeige: -webkit-flex; Inhalt ausrichten: Flex-Ende; .cropper-box { biegen: 1; Breite: 100 %; .cropper { Breite: automatisch; Höhe: 300px; } } .show-preview { biegen: 1; -webkit-flex: 1; Anzeige: Flex; Anzeige: -webkit-flex; Inhalt ausrichten: zentriert; .Vorschau { Überlauf: versteckt; Rand: 1px durchgezogen #67c23a; Hintergrund: #cccccc; } } } .footer-btn { Rand oben: 30px; Anzeige: Flex; Anzeige: -webkit-flex; Inhalt ausrichten: Flex-Ende; .scope-btn { Anzeige: Flex; Anzeige: -webkit-flex; Inhalt ausrichten: Abstand dazwischen; Polsterung rechts: 10px; } .upload-btn { biegen: 1; -webkit-flex: 1; Anzeige: Flex; Anzeige: -webkit-flex; Inhalt ausrichten: zentriert; } .btn { Gliederung: keine; Anzeige: Inline-Block; Zeilenhöhe: 1; Leerzeichen: Nowrap; Cursor: Zeiger; -webkit-auftritt: keines; Textausrichtung: zentriert; -webkit-box-sizing: Rahmenbox; Box-Größe: Rahmenbox; Umriss: 0; -Webkit-Übergang: 0,1 s; Übergang: 0,1 s; Schriftstärke: 500; Polsterung: 8px 15px; Schriftgröße: 12px; Rahmenradius: 3px; Farbe: #fff; Hintergrundfarbe: #409eff; Rahmenfarbe: #409eff; Rand rechts: 10px; } } </Stil> Wirkung: ZusammenfassenDieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalt auf 123WORDPRESS.COM lesen können! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erläuterung der Lösung, um den Inhalt im Container im Flex-Layout zu halten
>>: Die Aktualisierung der Seite zur Formularübermittlung springt nicht
Inhaltsverzeichnis 1. Umgebungskonfiguration 1.NT...
Nachdem ich die Installation von Python8 minimier...
1. Häufig verwendete höherwertige Funktionen von ...
In letzter Zeit gibt es eine besonders ungewöhnli...
In der Datenbank führen sowohl die Schlüsselwörte...
Dieser Artikel beschreibt die Support- und Proble...
1. Einleitung Ich habe zuvor einen Artikel geschr...
Inhaltsverzeichnis 1. MySQL aus einer Makroperspe...
Inhaltsverzeichnis Lassen Sie uns zunächst kurz P...
Installieren Sie zuerst die abhängigen Pakete, um...
Manche Leute sagen, dass IE9 die zweite Revolutio...
Inhaltsverzeichnis React-Native-Projektinitialisi...
1. Problem Die bei der Initialisierung von MySQL ...
Siehe: https://www.jb51.net/article/112612.htm Üb...
Wenn Sie MySQL zum Abfragen der Datenbank verwend...