JavaScript zum Erzielen eines Klickbild-Flip-Effekts

JavaScript zum Erzielen eines Klickbild-Flip-Effekts

Ich habe kürzlich an einem Projekt zur Gesichtserfassung gearbeitet und als ich das Frontend-Modul schrieb, stieß ich auf ein Problem. Wenn Kunden Fotos hochladen oder Fotos aufnehmen und diese direkt hochladen, werden einige Bilder möglicherweise um 90 Grad gedreht. Daher müssen wir den Kunden eine Schaltfläche geben, damit sie die Bilder selbst drehen können. Der Effekt ist ungefähr wie folgt

Abbildung 1. Normaler Bild-Upload

Abbildung 2. Das Bild ist nach links gedreht

Abbildung 3. Bild nach rechts gedreht

Das Obige ist eine Bildrotationsfunktion

Beginnen wir nun mit dem Codeteil.

Hier habe ich eine Methode übernommen und mein aktuelles Bildformat ist base64. Es spielt keine Rolle, ob Sie auf andere Formate stoßen, da unser endgültiger Effekt noch in ein Bildobjekt konvertiert werden muss, um ihn zu erreichen.

/**
     * Bildrotation* @param direction Die Rotationsrichtung*/
    drehen (Richtung) {
      const img = neues Bild()
      // Die Idee besteht darin, das Bild auf ein Zeichenbrett abzubilden und das Bild dann neu zu zeichnen. Daher müssen wir ein Canvas-Objekt erstellen, das als Zeichenbrett fungiert. const canvas = document.createElement('canvas')
      // Base64-Konvertierung des Bildobjekts img.src = this.uploadImage
      // Denken Sie daran, base64 in ein Bildobjekt zu konvertieren, bevor Sie andere Vorgänge ausführen. Dem Autor ist hier ein Fehler unterlaufen. Die Onload-Methode lädt das Bild, bevor andere Vorgänge ausgeführt werden. Wenn das Bild ein Dateipfad ist, ist der domänenübergreifende Aufrufeffekt offensichtlicher.img.onload = () => {
        // Die Höhe und Breite von img können nicht abgerufen werden, nachdem das img-Element ausgeblendet wurde, andernfalls tritt ein Fehler auf const height = img.height
        const width = img.width
        // Der Drehwinkel ist in Radiant als Parameter angegeben const ctx = canvas.getContext('2d')
        wenn (Richtung === 'rechts') {
          canvas.width = Höhe
          canvas.height = Breite
          ctx.rotate(90 * Math.PI / 180)
          ctx.drawImage(Bild, 0, 0, Breite, -Höhe)
        } anders {
          canvas.width = Höhe
          canvas.height = Breite
          ctx.rotate(-90 * Math.PI / 180)
          ctx.drawImage(Bild, 0, 0, -Breite, Höhe)
        }
        // Konvertiere das gedrehte Bild zurück in Base64
        dies.uploadImage = dies.getBase64Image(img, canvas)
      }
    },
    /**
    * Konvertieren Sie die Bilddatei in Base64
    */
    getBase64Image (Bild, Leinwand) {
      const ctx = canvas.getContext('2d')
      ctx.drawImage(Bild, 0, 0, Bildbreite, Bildhöhe)
      const ext = img.src.substring(img.src.lastIndexOf('.') + 1).toLowerCase()
      returniere canvas.toDataURL('image/' + ext)
    }

Hinweis: Wenn das Bild von einer Cross-Domain bezogen wird, kann es bei der Konvertierung von Canvas zurück in Base64 zu Problemen kommen. In diesem Fall müssen Sie möglicherweise einen Proxy aktivieren, um das Bild abzurufen.

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:
  • JS implementiert die Methode, der Maus zu folgen, um das Bild in drei Dimensionen zu spiegeln
  • So implementieren Sie einfaches Bildumdrehen mit JavaScript
  • js-Methode zum Erzielen eines 360-Grad-Flip-Effekts des Bildes mithilfe der Tastensteuerung
  • Beispielcode für die JS-Bildumkehrsteuerung (kompatibel mit Firefox, also Chrome)

<<:  MySQL-Beispiel für die Abfrage aller untergeordneten mehrstufigen Unterabteilungen basierend auf einer bestimmten Abteilungs-ID

>>:  Starten Sie die auf Docker basierende nginxssl-Konfiguration

Artikel empfehlen

Docker nginx Beispielmethode zum Bereitstellen mehrerer Projekte

Voraussetzungen 1. Docker wurde auf dem lokalen C...

Vue implementiert die Bildfrequenzwiedergabe des Karussells

In diesem Artikelbeispiel wird der spezifische Co...

So verwenden Sie SHTML-Includes

Durch die Anwendung können einige öffentliche Bere...

Detaillierte Schritte zur Installation von MySQL 8.0.18-winx64 unter Win10

1. Gehen Sie zunächst auf die offizielle Website,...

So schreiben Sie eleganten JS-Code

Inhaltsverzeichnis Variable Verwenden Sie aussage...

MySQL-Optimierung: So schreiben Sie hochwertige SQL-Anweisungen

Vorwort Im Internet gibt es zahlreiche Informatio...

Grafisches Tutorial zur Installation von MySQL 5.5 unter Win7

Die MySQL-Installation ist relativ einfach. Norma...

Best Practices für die Entwicklung von Amap-Anwendungen mit Vue

Inhaltsverzeichnis Vorwort Asynchrones Laden Pake...

Lösung für unvollständige Textanzeige im El-Tree

Inhaltsverzeichnis Methode 1: Der einfachste Weg,...

10 sehr gute CSS-Fähigkeiten sammeln und teilen

Hier können Sie durch geschickten Einsatz von CSS-...