Vue implementiert das Hinzufügen von Wasserzeichen zu hochgeladenen Bildern

Vue implementiert das Hinzufügen von Wasserzeichen zu hochgeladenen Bildern

In diesem Artikel wird der spezifische Implementierungscode zum Hinzufügen von Wasserzeichen zu hochgeladenen Bildern in Vue zu Ihrer Information bereitgestellt. Der spezifische Inhalt ist wie folgt

1. Kapselungs- und Wasserzeichenmethode

/**
 * Wasserzeichen hinzufügen * @param {blob} Datei
 * @param {string} el
 * @returns {Versprechen}
 */
exportiere asynchrone Funktion addWaterMarker(Datei, el = '#markImg') {
  returniere neues Promise(async (auflösen, ablehnen) => {
    versuchen {
      // Komprimieren und drehen Sie das Bild zuerst file = warte auf compressor(file)
      // Konvertiere den Datei-Blob in ein Bild let img = await blobToImg(file)

      //Eine Leinwand erstellen let canvas = document.createElement('canvas')
      canvas.width = img.natürlicheBreite
      Leinwandhöhe = Bild.natürliche Höhe
      lass ctx = canvas.getContext('2d')

      // Das hochgeladene Bild füllen ctx.drawImage(img, 0, 0, canvas.width, canvas.height)

      // Wasserzeichenbild generieren const markEle = document.querySelector(el)
      const markWidth = markEle.clientWidth
      const scale = Leinwandbreite * 0,25 / Markierungsbreite
      // Skalieren Sie zuerst das Wasserzeichen und konvertieren Sie es dann in ein Bild markEle.style.transform = `scale(${scale})`
      const markImg = warte auf htmlToCanvas(markEle).

      // Wasserzeichen füllen ctx.drawImage(markImg, canvas.width – markImg.width – 15 * scale, canvas.height – markImg.height – 15 * scale, markImg.width, markImg.height)

      //Leinwand in Blob umwandeln
      canvas.toBlob(Blob => auflösen(Blob))
    } Fehler abfangen {
      ablehnen(Fehler)
    }

  })
}

Funktion blobToImg(blob) {
  returniere neues Promise((lösen, ablehnen) => {
    let reader = neuer FileReader()
    reader.addEventListener('laden', () => {
      let img = neues Bild()
      img.src = Leser.Ergebnis
      img.addEventListener('laden', () => auflösen(img))
    })
    Leser.readAsDataURL(blob)
  })
}


Exportfunktion htmlToCanvas(el, Hintergrundfarbe = 'rgba(0,0,0,.1)') {
  returniere neues Promise(async (auflösen, ablehnen) => {
    versuchen {
      const markImg = warte auf html2canvas(el, {
        scale: 2, //Der Standardwert window.devicePixelRatio wird hier nicht verwendet, er muss mit dem mobilen Ende übereinstimmen allowTaint: false, //Verschmutzung zulassen useCORS: true,
        backgroundColor //'transparent' //Hintergrundfarbe})
      auflösen(markImg)
    } Fehler abfangen {
      ablehnen(Fehler)
    }
  })
}

/**
 * Bilder komprimieren und drehen * @param {blob} Datei
 * @param {number} Qualitätskomprimierungsverhältnis * @param {number} maxWidth
 * @returns {Versprechen}
 */
Exportfunktion Kompressor (Datei, Qualität = 0,6, max. Breite = 750) {
  gib ein neues Versprechen zurück (Auflösen => {
    neuer Kompressor (Datei, {
      maxBreite,
      Qualität,
      Erfolg: Entschlossenheit,
      Fehler(Fehler) {
        console.log(Fehlermeldung)
      }
    })
  })
}

2. Einsatz im Projekt

<!-- Bild hochladen-->
<div Klasse="flex mt20" v-if="item.questionType === 4">
  <van-uploader
    v-Modell="item.imgUpload"
    mehrere="true"
    verzögertes Laden
    :deletetable="!istDeaktiviert"
    :disabled="istDeaktiviert"
    @delete="handleDeleteImg({ ...Argumente, Element })"
    :before-read="Handle vor Bildupload"
    :nachher-lesen="handleAfterImgUpload"
    @click.native="aktuellesItem = Artikel"
  />
</div>
    
<Skript>
importieren {
  getTaskDetail,
  BenutzerAusführen,
  SendenFlow,
  ablehnenFlow,
} von '@/api/myTask';

importiere { uploadOSS } von '@/utils/oss';
importiere { parseTime, addWaterMarker } aus '@/utils';

importiere { ImagePreview } von 'vant';

Compressor von „compressorjs“ importieren;

const fileExtensions = ['xlsx', 'xls', 'docx', 'doc', 'pdf'];

const quality = 0.2; //Bildkomprimierungsqualität export default {
  Methoden: {
  // Vor dem Hochladen async handleBeforeImgUpload(img, detail) {
      wenn (!img) {
        zurückkehren
      }
      returniere neues Promise(async (auflösen, ablehnen) => {
        wenn (Array.isArray(img)) {
          wenn (Bildlänge > 5) {
            this.$toast('Laden Sie bis zu 5 Fotos gleichzeitig hoch, bitte laden Sie sie in Stapeln hoch!')
            ablehnen()
          }
          lass Blobs = []
          für (const-Datei von img) {
            // Bilder, die größer als 512 KB sind, werden zuerst komprimiert, wenn (Dateigröße > 512 * 1024 und file.type.includes('image/')) {
              Datei = warte auf this.compressor(Datei)
            }
            // Wasserzeichen hinzufügen let blob = await addWaterMarker(file)
            blob.name = datei.name
            blobs.push(blob)
          }
          auflösen (Blobs)
        } anders {
          // Bilder, die größer als 512 KB sind, sollten zuerst komprimiert werden, wenn (Bildgröße > 512 * 1024 && img.type.includes('image/')) {
            img = warte auf dies.compressor(img)
          }
          const blob = warte auf addWaterMarker(img).
          blob.name = img.name
          auflösen (Blob)
        }
      })
    },
    
    //Nach dem Hochladen async handleAfterImgUpload(img, detail) {
      versuchen {
        $wird geladen.anzeigen()
        wenn (Array.isArray(img)) {
          img.forEach(async ({ Datei }, Index) => {
            wenn (!Dateiname || !Dateityp.includes('Bild/')) {
              dies.currentItem.imgUpload.splice(detail.index + index, 1)
              this.$toast('Upload fehlgeschlagen, es können nur Fotos hochgeladen werden!')
              // Hochladen abgeschlossen, wenn (Index === Bildlänge - 1) {
                $wird geladen.ausblenden()
              }
              return //return in forEach entspricht continue
            }
            if (Dateigröße > 1024 * 1024 * 10) {
              dies.currentItem.imgUpload.splice(detail.index + index, 1)
              this.$toast('Die Datei ist zu groß, eine einzelne Datei darf nicht größer als 10 MB sein!')
              // Hochladen abgeschlossen, wenn (Index === Bildlänge - 1) {
                $wird geladen.ausblenden()
              }
              zurückkehren
            }
            versuchen {
              const { Dateiname, URL } = warte auf UploadOSS(Datei)
              dies.currentItem.answer.push({
                URL (URL = URL = URL),
              })
            } Fehler abfangen {
              dies.currentItem.imgUpload.splice(detail.index + index, 1)
              this.$toast('Hochladen fehlgeschlagen, bitte versuchen Sie es später noch einmal!')
              Konsole.Fehler(Fehler)
            }
            // Hochladen abgeschlossen, wenn (Index === Bildlänge - 1) {
              $wird geladen.ausblenden()
            }
          })
        } anders {
          wenn (!img.file.type.includes('image')) {
            dies.currentItem.imgUpload.splice(detail.index, 1)
            $wird geladen.ausblenden()
            this.$toast('Upload fehlgeschlagen, es können nur Fotos hochgeladen werden!')
            zurückkehren
          }
          wenn (Bilddateigröße >= 1024 * 1024 * 10) {
            dies.currentItem.imgUpload.splice(detail.index, 1)
            $wird geladen.ausblenden()
            this.$toast('Die Datei ist zu groß und darf 10 MB nicht überschreiten!')
            zurückkehren
          }
          // Wenn es größer als 512 KB ist, komprimieren Sie es zuerst. let file = img.file
          const { Dateiname, URL } = warte auf UploadOSS(Datei)
          dies.currentItem.answer.push({
            URL (URL = URL = URL),
          })
          $wird geladen.ausblenden()
        }
      } Fehler abfangen {
        dies.currentItem.imgUpload.splice(detail.index, 1)
        $wird geladen.ausblenden()
        this.$toast('Hochladen fehlgeschlagen, bitte versuchen Sie es später noch einmal!')
        Konsole.Fehler(Fehler)
      }
    }
 }

Danke an Bruder Long für seine Führung;

3. Die Auswirkungen sind wie folgt

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • So verwenden Sie Bilder und Bildwasserzeichen mit versteckten Textinformationen in Vue
  • Vue implementiert das Hinzufügen eines Wasserzeicheneffekts zur Seite
  • Vue integriert PDF.js, um eine PDF-Vorschau zu implementieren und Schritte zum Hinzufügen von Wasserzeichen durchzuführen
  • Vue implementiert die Seitenwasserzeichenfunktion
  • Drei Möglichkeiten zum Hochladen von Bildern mit Vue
  • Der Uploader von Vue+Vant auf dem mobilen Endgerät realisiert die Funktionen des Hochladens, Komprimierens und Drehens von Bildern
  • Vue+elementUI implementiert ein Beispiel für eine Formular- und Bild-Upload- und Überprüfungsfunktion
  • vue + elementUI realisiert die Bild-Upload-Funktion
  • Basierend auf VUE Bilder auswählen, hochladen und auf der Seite anzeigen (Bilder können gelöscht werden)
  • Vue ermöglicht das Hinzufügen von Wasserzeichen zu hochgeladenen Bildern (aktualisierte Version)

<<:  Einführung in die Verwendung der vier wichtigsten SQL-Rankingfunktionen ROW_NUMBER, RANK, DENSE_RANK, NTILE

>>:  Lösen Sie schnell das Problem der chinesischen Eingabemethode unter Linux

Artikel empfehlen

So verbinden Sie eine virtuelle Linux-Maschine mit WLAN

Im Leben ist das Internet allgegenwärtig. Wir kön...

Realisierung der Echtzeit-Dateisynchronisierung zwischen Linux-Servern

Anwendungsszenarien Bei vorhandenen Servern A und...

5 Möglichkeiten, um schnell den Leerraum eines Inline-Blocks in HTML zu entfernen

Der Eigenschaftswert „Inline-Block“ ist sehr nütz...

Detaillierte Erklärung des Unterschieds zwischen tinyint und int in MySQL

Frage: Was ist der Unterschied zwischen int(1) un...

Sublime/vscode – schnelle Implementierung zur Generierung von HTML-Code

Inhaltsverzeichnis Grundlegende HTML-Struktur Gen...

Detaillierte Beispiele für Docker-Compose-Netzwerke

Ich habe heute mit den Netzwerkeinstellungen unte...

Ubuntu-Installation Matlab2020b, ausführliches Tutorial und Ressourcen

Inhaltsverzeichnis 1. Ressourcendateien 2. Instal...

Zusammenfassung der XHTML-Anwendung im Webdesign-Studium

<br />Im Allgemeinen ist die Dateiorganisati...

Beispiel für reines CSS zum Ändern des Bildlaufleistenstils des Browsers

Verwenden Sie CSS, um den Stil der Bildlaufleiste...

Einführung in ApplicationHost.config (IIS-Speicherkonfigurationsbereichsdatei)

Nehmen Sie für eine neu erstellte Website ASP.NET...

Lösung für das Problem „VMware-virtuelle Maschine ohne Netzwerk“

Inhaltsverzeichnis 1. Problembeschreibung 2. Prob...

Verwendung des Linux-Befehls sed

1. Funktionseinführung sed (Stream EDitor) ist ei...