Detaillierte Erklärung der Webseiten-Screenshot-Funktion in Vue

Detaillierte Erklärung der Webseiten-Screenshot-Funktion in Vue

Seit Kurzem besteht im Projekt die Anforderung, Bilder hochzuladen. Die von den Kunden hochgeladenen Bilder haben jedoch unterschiedliche Größen. Daher müssen wir die Proportionen der Kundenbilder festlegen. Diese müssen jedoch den Anforderungen des Kunden entsprechen. Daher dachte ich daran, Screenshots zu machen.

Ergebnisse erzielen

Unsere Architektur ist Vue, daher verwenden wir ein Vue-Screenshot-Plugin

Installieren Sie das Plugin: npm install vue-cropper --save-dev

Komponenten importieren

 importiere Vue von „vue“;
 importiere { VueCropper } von "vue-cropper";

 Vue.use(VueCropper)

Kerncode

 <div>
            <span class="spanStyle">Produktbilder:</span>
            <!--Das gesamte Bildvorschau-Div-->
            <div Stil="Anzeige:flex;padding-left: 300px;">
              <div Klasse = "info-item" Stil = "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;" >Bild auswählen</label>
                <Eingabetyp="Datei" id="Uploads" :Wert="Bilddatei" Stil="Position:absolut; Clip:Rechteck(0 0 0 0);" akzeptieren="Bild/png, Bild/jpeg, Bild/gif, Bild/jpg" @change="uploadImg($event, 1)">
                <div Klasse = "Linie" Stil = "Rand links: -280px;Rand oben: 85px;">
                  <div Klasse = "cropper-content" Stil = "margin-top: -60px;margin-left: 160px;">
                    <div Klasse="cropper">
                      <vueCropper
                        ref="Beschneider"
                        :img="Option.img"
                        :Ausgabegröße="Option.Größe"
                        :Ausgabetyp="Option.Ausgabetyp"
                        :info="wahr"
                        :full="Option.full"
                        :kannVerschieben="Option.kannVerschieben"
                        :kannBox verschieben="Option.kannBox verschieben"
                        :original="Option.original"
                        :autoCrop="Option.autoCrop"
                        :autoCropWidth="Option.autoCropWidth"
                        :autoCropHeight="Option.autoCropHeight"
                        :fixedBox="Option.fixedBox"
                        @realTime="Echtzeit"
                      ></vueCropper>
                    </div>
                    <!--Das aufgenommene Bild wird in div angezeigt-->
                    <div Stil="Margin-left:700px;">
                      <div Klasse = "show-preview" :style = "{'width': '300px', 'height':'150px', 'overflow': 'hidden', 'margin-left': '-650px'}">
                        <div :style="Vorschau.div" >
                          <img :src="vorschau.url" :style="vorschau.img">
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>

Vorschaumethode

Daten (){
	zurückkehren {
		 Kopfbild:'',
                //Bild ausschneiden und Mist hochladen: false,
                Vorschau: {},
                Option: {
                    img: '',
                    outputSize:1, //Bildqualität nach dem Schneiden (0,1-1)
                    full: false, // Originalbildmaßstab ausgeben Screenshot Requisiten Name full
                    Ausgabetyp: "png",
                    kannVerschieben: wahr,
                    Original: falsch,
                    canMoveBox: wahr,
                    autoCrop: wahr,
                    autoCropWidth: 300,
                    autoCropHeight: 150,
                    fixedBox: wahr
                },
                Dateiname:'', //Lokale Dateiadresse downImg: '#',
                imgDatei:'',
                uploadImgRelaPath:'', //Die Adresse des hochgeladenen Bildes (ohne den Domänennamen des Servers)
	}
},
Methoden:{
	// Echtzeitvorschaufunktion realTime(data) {
       console.log('Echtzeit')
       this.previews = Daten
   },
   //Wähle ein lokales Bild aus uploadImg(e, num) {
       console.log('uploadImg');
       var _this = dies;
       //Bild hochladen var file = e.target.files[0]
       _this.fileName = Dateiname;
       wenn (!/\.(gif|jpg|jpeg|png|bmp|GIF|JPG|PNG)$/.test(e.ziel.wert)) {
           alert('Der Bildtyp muss einer der folgenden sein: .gif, jpeg, jpg, png, bmp')
           return false
       }
       var reader = neuer FileReader();
       reader.onload = (e) => {
           Daten lassen;
           wenn (Typ von e.Ziel.Ergebnis === 'Objekt') {
               // Array-Puffer in Blob konvertieren. Wenn es Base64 ist, ist es nicht erforderlich. data = window.URL.createObjectURL(new Blob([e.target.result]))
           }
           anders {
               Daten = e.Ziel.Ergebnis
           }
           wenn (Zahl === 1) {
               _this.option.img = Daten
           } sonst wenn (Zahl === 2) {
               _this.example2.img = Daten
           }
       }
       // // In Blob konvertieren
       Leser.readAsArrayBuffer(Datei);
   }
}
 

Dann müssen wir das Bild nach der Aufnahme abrufen und verwenden die Rückruffunktion von Cropper, um das Bild abzurufen. Hier erhalten wir das Bild, das wir in das Blob-Format konvertiert haben (es kann ohne Konvertierung nicht angezeigt werden).
Dies liegt daran, dass das Backend die Daten als Dateityp empfängt. Daher muss ich den Blob in eine Datei konvertieren und die Datei dann mit formData hochladen.

Produkt hinzufügen () {
dies.$refs.cropper.getCropBlob((data) => {
	  //Diese Daten sind das Blob-Bild, das wir abgefangen haben. let formData = new FormData();
	  //Dateinamen abrufen, da dieser bei der Dateikonvertierung nicht verwendet werden kann. Sie müssen also eine Variable verwenden, um var name=this.fileName zuzuweisen.
       var Datei = neue Datei ([Daten], Name, {Typ: Daten.Typ, letzte Änderung: Datum.jetzt()});
       formData.append("Dateien",Datei)
       neues Versprechen((lösen, ablehnen) => {
           productAdd(formData).then(response => {
               wenn (Antwortcode == 20000) {
                   Dialog.alarm({
                       Titel: 'Tipps',
                       Meldung: ,Erfolgreich gespeichert!‘ '
                   }).then(() => {
                       dies.zurück('/produktInfo')
                   });

               }
           }).fangen(Fehler => {
               ablehnen(Fehler)
           })
       })
   })
}

Bei der tatsächlichen Anwendung auf Ihr eigenes Projekt sind noch Anpassungen erforderlich, z. B. Bearbeiten und Wiedergeben von Bildern, Hochladen mehrerer ausgeschnittener Bilder usw.

Oben finden Sie den ausführlichen Inhalt der detaillierten Erklärung der Vue-Implementierung der Screenshot-Funktion für Webseiten. Weitere Informationen zum Screenshot von Webseiten in Vue finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Wissen Sie, wie Sie mit Vue Screenshots von Webseiten erstellen?

<<:  border-radius-Methode zum Hinzufügen abgerundeter Ränder zu Elementen

>>:  Einige Fähigkeiten, die Sie beim Erstellen von Webseiten kennen müssen

Artikel empfehlen

Implementierung der MySQL5.7 mysqldump-Sicherung und -Wiederherstellung

MySQL-Sicherung Kaltes Backup:停止服務進行備份,即停止數據庫的寫入H...

DOCTYPE-Element ausführliche Erklärung vollständige Version

1. Übersicht In diesem Artikel wird das DOCTYPE-E...

Ubuntu-Grundeinstellungen: Installation und Nutzung des OpenSSH-Servers

Protokollieren Sie die Installation und Verwendun...

Entwicklungshandbuch für Chrome-Plugins (Erweiterungen) (vollständige Demo)

Inhaltsverzeichnis Vorne geschrieben Vorwort Was ...

Vollständige Analyse der MySQL-Datentypen

Datentyp: Die grundlegenden Regeln, die definiere...

Theorie: Die zwei Jahre User Experience

<br />Es ist nicht länger als zwei Jahre her...

Detaillierte Erklärung zum Anpassen des Linux-Befehlsverlaufs

Der Befehl „Bash History“ im Linux-System hilft d...

8 Befehle zur effektiven Verwaltung von Prozessen in Linux

Vorwort Die Rolle des Prozessmanagements: Integri...

MySQL-Komplettabsturz: Detaillierte Erklärung der Abfragefilterbedingungen

Überblick In tatsächlichen Geschäftsszenarioanwen...

Docker Detaillierte Abbildungen

1. Einführung in Docker 1.1 Virtualisierung 1.1.1...

So verwenden Sie CSS-Variablen in JS

So verwenden Sie CSS-Variablen in JS Verwenden Si...

Installations-JDK-Tutorialanalyse für Linux-System (Centos6.5 und höher)

Artikelstruktur 1. Vorbereitung 2. Installieren S...