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

Spezifische Methode zum Anzeigen von Benutzerautorisierungsinformationen in MySQL

Spezifische Methode: 1. Öffnen Sie die Eingabeauf...

Details zur Verwendung des Vue-Slots

Inhaltsverzeichnis 1. Warum Slots verwenden? 1.1 ...

MySQL-Index für Anfänger

Vorwort Da die wichtigste Datenstruktur im MySQL-...

So fahren Sie MySQL sicher herunter

Beim Herunterfahren des MySQL-Servers können, abh...

So verwenden Sie Nginx, um domänenübergreifende Front-End-Probleme zu lösen

Vorwort Bei der Entwicklung statischer Seiten, wi...

Detaillierte Erklärung von Prototypen und Prototypenketten in JavaScript

Inhaltsverzeichnis Prototyp-Kettendiagramm Grundl...

jQuery erzielt Vollbild-Scrolling-Effekt

In diesem Artikelbeispiel wird der spezifische Co...