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

Drei Möglichkeiten zum Löschen einer Tabelle in MySQL (Zusammenfassung)

Drop-Tabelle Drop löscht Tabelleninformationen di...

Zusammenfassung der Methode von React zum Erstellen von Komponenten

Inhaltsverzeichnis 1. Komponenten mit Funktionen ...

jQuery simuliert einen Picker, um einen gleitenden Auswahleffekt zu erzielen

In diesem Artikel wird der spezifische Code von j...

Oberflächliches Webdesign

<br />Ich war schon immer der Meinung, dass ...

Unterschied und Implementierung von JavaScript Anti-Shake und Throttling

Inhaltsverzeichnis 1. Anti-Shake 2. Drosselung 3....

SQL-Methode zum Berechnen der Zeitstempeldifferenz

SQL-Methode zum Berechnen der Zeitstempeldifferen...

Zusammenfassung zur Verwendung der Bootstrap-Tabelle

In diesem Artikel erfahren Sie, wie Sie die Boots...

So richten Sie Referer in Nginx ein, um Bilddiebstahl zu verhindern

Wenn die Bilder des Servers von anderen Websites ...

So installieren und konfigurieren Sie den Apache-Webserver

Erfahren Sie, wie Sie Ihre eigene Website auf Apa...

htm-Anfängerhinweise (unbedingt für Anfänger lesen)

1. Was ist HTML HTML (HyperText Markup Language):...

Detaillierte Erklärung der Destrukturierungszuweisung in JavaScript

Inhaltsverzeichnis Konzept Array-Destrukturierung...