Vue ermöglicht das Hinzufügen von Wasserzeichen zu hochgeladenen Bildern (aktualisierte Version)

Vue ermöglicht das Hinzufügen von Wasserzeichen zu hochgeladenen Bildern (aktualisierte Version)

Das Vue-Projekt implementiert eine aktualisierte Version zum Hinzufügen von Wasserzeichen zu hochgeladenen Bildern zu Ihrer Information. Die spezifischen Inhalte sind wie folgt

Kapselungs-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)
      }
    })
  })
}

Verwenden Sie Wasserzeichen und komprimieren Sie Bilder auf Seiten

<Vorlage>
  <div>
    <el-hochladen
      Aktion=""
      :headers="uploadProps.headers"
      Listentyp = "Bildkarte"
      :Dateiliste anzeigen="false"
      :http-request="fnUploadRequest"
      :bei-Erfolg="HandleErfolg"
      :before-upload="Upload-Handle"
      akzeptieren=".png,.jpg,.jpeg,.gif,.webp"
    >
      <div Klasse="flex-center">
        <Steckplatz></Steckplatz>
      </div>
    </el-upload>
    <!-- Wasserzeichen zum Hochladen von Bildern-->
    <div id="markImg">
      <div Klasse="Logo">
        <img src="@/assets/img/icon-logo.png" />
        Text text</div>
      <p>
        {{ parseTime(fileDate, '{y}-{m}-{d} {h}:{i}:{s}') }} Woche {{
          parseTime(Dateidatum, '{a}')
        }}
      </p>
      <p>{{ Testamentsvollstrecker }}</p>
    </div>
  </div>
</Vorlage>

<Skript>
importieren {
  getAccessToken,
  getRefreshToken,
  getAccessTokenTTL
} von '@/utils/auth'
importiere { uploadOSS } von '@/utils/ossImage'
importiere { parseTime, compressor, addWaterMarker } aus '@/utils'

Standard exportieren {
  Name: "Index",
  Requisiten: {
    braucheWasserzeichen:
      Typ: Boolean,
      Standard: false
    },
    Testamentsvollstrecker: {
      Typ: Zeichenfolge,
      Standard: ''
    }
  },
  Daten() {
    zurückkehren {
      DateiDatum: neues Datum()
    }
  },
  erstellt() {
    this.parseTime = Analysezeit
  },
  berechnet: {
    BenutzerkontoID() {
      gib dies zurück.$store.state.user.userAccountID
    },
    uploadProps() {
      zurückkehren {
        // Aktion: `${process.env.VUE_APP_BASE_API}/api/image/upload`,
        Überschriften: {
          // Die Schnittstelle erfordert möglicherweise ein Token: "",
          Autorisierung: getAccessToken()
        },
        Daten: {}
      }
    }
  },
  Methoden: {
    // vorUpload_u(Datei, Dateiliste){
    // // console.log(Datei, Dateiliste);
    // var testmsg = file.name.substring(file.name.lastIndexOf('.') + 1)
    // const-Erweiterung = testmsg === 'png' || testmsg === 'jpg' || testmsg === 'jpeg' || testmsg === 'gif' || testmsg === 'webp'
    // const isLimit10M = Dateigröße / 1024 / 1024 < 10
    // var bool = false;
    // wenn (Erweiterung && isLimit10M) {
    // bool = wahr;
    // } anders {
    // bool = falsch;
    // }
    // wenn(!Erweiterung) {
    // this.$message.error('Bitte laden Sie eine Datei im Bildformat hoch!');
    // bool zurückgeben;
    // }
    // wenn(!isLimit10M) {
    // this.$message.error('Upload fehlgeschlagen, darf 10 M nicht überschreiten!');
    // bool zurückgeben;
    // }
    // bool zurückgeben;
    // },
    // Erfolgreich verarbeiten(res) {
    // konsole.log(res);
    // wenn (res.code == 0) {
    // dies.$emit('imgData', res.item);
    // this.$message.success('Bild erfolgreich hochgeladen!');
    // } anders {
    // this.$message.error('Bild konnte nicht hochgeladen werden!');
    // }
    // },
    // Fehler behandeln(Fehler){
    // this.$message.error('Bild konnte nicht hochgeladen werden!');
    // },

    // Bild hochladen Beurteilung handleUpload(file, fileList) {
      var testmsg = Datei.Name.Teilzeichenfolge(Datei.Name.letzterIndexvon('.') + 1)
      const-Erweiterung =
        testmsg.toLowerCase() === 'png' ||
        testmsg.toLowerCase() === 'jpg' ||
        testmsg.toLowerCase() === 'jpeg' ||
        testmsg.toLowerCase() === 'gif' ||
        testmsg.toLowerCase() === 'webp'
      const isLimit10M = Dateigröße / 1024 / 1024 < 10
      var bool = false
      if (Erweiterung && isLimit10M) {
        bool = wahr
      } anders {
        bool = falsch
      }
      if (!Erweiterung) {
        this.$message.error('Bitte laden Sie eine Datei im Bildformat hoch!')
        Rückgabewert bool
      }
      wenn (!isLimit10M) {
        this.$message.error('Upload fehlgeschlagen, darf 10 M nicht überschreiten!')
        Rückgabewert bool
      }
      Rückgabewert bool
    },
    // Bild asynchron hochladen fnUploadRequest(options) {
      versuchen {
        let file = options.file // Datei abrufen
        this.fileDate = Datei.letztesÄnderungsdatum
        // Komprimiere das Bild, wenn (Dateigröße > 512 * 1024 und file.type.includes('image/')) {
          Datei = warte auf Kompressor (Datei)
        }
        // Wasserzeichen hinzufügenif (this.needWaterMark) {
          const fileName = datei.name
          Datei = warte auf addWaterMarker(Datei, '#markImg')
          file.name = Dateiname
        }
        let res = warte auf UploadOSS(Datei)
        // Was zurückgegeben wird, ist die Bildadresse this.$emit('imgData', res)
        this.$message.success('Bild erfolgreich hochgeladen!')
      } fangen (e) {
        console.log(e)
        this.$message.error('Bild konnte nicht hochgeladen werden! Bitte erneut hochladen.')
      }
    },
    //Bildupload erfolgreich callback handleSuccess(res) {
      // konsole.log(res);
      wenn (res) {
        dies.$emit('imgData', res)
      }
    }
  }
}
</Skript>

<style lang="scss" scoped>
::v-tief .el-upload,
::v-deep .el-upload--Bildkarte {
  // Breite: 120px;
  Höhe: 24px;
  Höhe: 0;
  Rand: keiner;
  Zeilenhöhe: 0;
  Anzeige: Block;
  Hintergrund: #f5f6fb;
}
// ::v-tief .el-upload{
// Breite: 50px;
// }
.img-cont {
  Breite: 50px;
  Höhe: 24px;
  Hintergrund: #f5f6fb;
  .img-Symbol {
    Farbe: #ccc;
  }
  .img-text {
    Schriftgröße: 12px;
    Höhe: 24px;
    Farbe: #000;
  }
}
#markImg {
  Position: absolut;
  links: -9999999px;
  Textausrichtung: rechts;
  Polsterung: 10px 15px;
  .logo {
    Schriftstärke: 600;
    Schriftgröße: 15px;
    Farbe: #ffffff;

    Anzeige: Flex;
    Höhe: 21px;
    Elemente ausrichten: zentrieren;
    Inhalt ausrichten: Flex-Ende;
    img {
      Höhe: 21px;
      Rand rechts: 5px;
    }
  }
  P {
    Rand oben: 6px;
    Farbe: #ffffff;
    Schriftgröße: 12px;
    Schriftstärke: 400;
  }
}
</Stil> 

Aktualisierte Version der Wasserzeichenmethode

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

/**
 * Wasserzeichen hinzufügen * @param {blob} Datei
 * @param {string} el
 * @returns {Versprechen}
 */
 exportiere asynchrone Funktion addWaterMarker(Datei, el = '#brandMarkImg', Richtung = 'rightDown') {
  returniere neues Promise(async (auflösen, ablehnen) => {
    versuchen {
      const maxWidth = 750
      const img = warte auf blobToImg(Datei).
      const imgWidth = img.naturalWidth > maxWidth ? maxWidth : img.naturalWidth

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

      // Komprimieren und drehen Sie zuerst das Bild file = await compressor(file, (context, canvas) => {
        wenn(Richtung == 'rechtsUnten'){
          // Füllen Sie die untere rechte Ecke des Wasserzeichens context.drawImage(markImg, canvas.width – markImg.width – 15 * scale, canvas.height – markImg.height – 15 * scale, markImg.width, markImg.height)
        } anders {
          // Füllen Sie die untere linke Ecke des Wasserzeichens context.drawImage(markImg, 15 * scale, canvas.height - markImg.height - 15 * scale, markImg.width, markImg.height)
        }
      }, maxBreite)
      auflösen (Datei)
    } 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, {
        Maßstab: 2,
        allowTaint: false, //Verschmutzung zulassen useCORS: true,
        backgroundColor //'transparent' //Hintergrundfarbe})
      auflösen(markImg)
    } Fehler abfangen {
      ablehnen(Fehler)
    }
  })
}

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:
  • Vue implementiert das Hinzufügen von Wasserzeichen zu hochgeladenen Bildern
  • 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)

<<:  Lösung für das Problem, dass Navicat keine Remoteverbindung zum MySql-Server herstellen kann

>>:  Schritte zur Installation von cuda10.1 unter Ubuntu 20.04 (grafisches Tutorial)

Artikel empfehlen

So stellen Sie mit Navicat eine Remoteverbindung zur Cloud-Server-Datenbank her

Es ist sehr praktisch, eine Verbindung zu einer R...

base target="" steuert den Ziel-Open-Frame des Links

<base target=_blank> ändert den Zielrahmen d...

JavaScript ermittelt, ob der Browser IE ist

Als Frontend-Entwickler komme ich an den Tücken d...

So importieren und exportieren Sie Docker-Images

Dieser Artikel stellt den Import und Export von D...

XHTML-Tutorial: Der Unterschied zwischen Transitional und Strict

Tatsächlich ist XHTML 1.0 in zwei Typen unterteil...

Abkürzungszeichen und Akronymzeichen

Die Tags <abbr> und <acronym> stellen ...

Docker: Zeigen Sie den Mount-Verzeichnisvorgang des Containers an

Nur Informationen zum Mount-Verzeichnis des Docke...

Teilen Sie 8 MySQL-Fallstricke, die Sie erwähnen müssen

MySQL ist einfach zu installieren, schnell und ve...

Detaillierte Erklärung der grep- und egrep-Befehle in Linux

Vertreter / egrep Syntax: grep [-cinvABC] 'wo...

Detaillierter Installationsprozess von MySQL5.6.40 unter CentOS7 64

MySQL5.6.40-Installationsprozess unter CentOS7 64...