Erläuterung der Lösung zur mobilen H5-Bildgenerierung in JavaScript

Erläuterung der Lösung zur mobilen H5-Bildgenerierung in JavaScript

Derzeit gibt es viele Betriebsaktivitäten für öffentliche WeChat-Konten, und es besteht die Notwendigkeit, Bilder zu generieren. Nachdem die Bilder generiert wurden, können sie an Freunde gesendet und im Freundeskreis verbreitet werden, was der Produktwerbung förderlich ist!

1.

Sie können Canvas zum Generieren von Bildern verwenden, da es aber bereits eine Open-Source-Bibliothek namens html2canvas gibt, habe ich sie aus Zeitgründen nicht selbst geschrieben.

GitHub-Adresse: html2canvas

LiveDemo

    /**
     * Ermitteln Sie das Pixelverhältnis gemäß window.devicePixelRatio*/
    Funktion DPR() {
        wenn (window.devicePixelRatio && window.devicePixelRatio > 1) {
            gibt window.devicePixelRatio zurück;
        }
        Rückgabe 1;
    }
    /**
     * Konvertieren Sie den übergebenen Wert in eine Ganzzahl */
    Funktion parseValue(Wert) {
        gibt parseInt(Wert, 10) zurück;
    };
    /**
     * Leinwand zeichnen
     */
    asynchrone Funktion drawCanvas (Selektor) {
        // Holen Sie sich den DOM-Knoten, den Sie konvertieren möchten const dom = document.querySelector(selector);
        const box = window.getComputedStyle(dom);
        // Berechnete Breite und Höhe des DOM-Knotens const width = parseValue(box.width);
        const Höhe = parseValue(Box.Höhe);
        // Pixelverhältnis abrufen const scaleBy = DPR();
        // Ein benutzerdefiniertes Canvas-Element erstellen var canvas = document.createElement('canvas');
        //Setzen Sie die Canvas-Elementattribute Breite und Höhe auf das Verhältnis Breite und Höhe des DOM-Knotens * Pixel canvas.width = Breite * scaleBy;
        canvas.height = Höhe * Skalierung nach;
        // Canvas-CSS-Breite und -Höhe auf DOM-Knotenbreite und -Höhe einstellen canvas.style.width = `${width}px`;
        Leinwand.Stil.Höhe = `${height}px`;
 
        // Pinsel abrufen const context = canvas.getContext('2d');
 
        // Alle gezeichneten Inhalte nach Pixelverhältnis skalieren context.scale(scaleBy, scaleBy);
 
        sei x = Breite;
        sei y = Höhe;
        returniere und warte auf html2canvas(dom, {canvas}).dann(function () {
            ConvertCanvasToImage(Leinwand, x, y)
        })
    }
 
    /**
     * Konvertieren Sie das Bild in das Base64-Format*/
    Funktion convertCanvasToImage(canvas, x, y) {
        let image = neues Bild();
        let _container = document.getElementsByClassName('container')[0];
        let _body = document.getElementsByTagName('body')[0];
        Bildbreite = x;
        Bildhöhe = y;
        image.src = canvas.toDataURL("bild/png");
        _body.removeChild(_container);
        Dokument.Body.AppendChild(Bild);
        Bild zurückgeben;
    }
    zeichneCanvas('.container')

2.

Da aktuelle Mobiltelefone alle über hochauflösende Bildschirme verfügen, erscheinen die Bilder unscharf, wenn Sie sie nicht verarbeiten. Warum erscheinen sie unscharf? Dabei geht es um das Gerätepixelverhältnis devicePixelRatio js stellt window.devicePixelRatio zur Verfügung, um das Gerätepixelverhältnis abzurufen

Funktion DPR() {
        wenn (window.devicePixelRatio && window.devicePixelRatio > 1) {
            gibt window.devicePixelRatio zurück;
        }
        Rückgabe 1;
    }

Mit dieser DPR-Funktion wird das Pixelverhältnis des Geräts ermittelt. Was ist nach dem Ermitteln des Pixelverhältnisses zu tun?

var Leinwand = Dokument.createElement('Leinwand');
        //Setzen Sie die Canvas-Elementattribute Breite und Höhe auf das Verhältnis Breite und Höhe des DOM-Knotens * Pixel canvas.width = Breite * scaleBy;
        canvas.height = Höhe * Skalierung nach;
        // Canvas-CSS-Breite und -Höhe auf DOM-Knotenbreite und -Höhe einstellen canvas.style.width = `${width}px`;
        Leinwand.Stil.Höhe = `${height}px`;
 
        // Pinsel abrufen const context = canvas.getContext('2d');
 
        // Alle gezeichneten Inhalte nach Pixelverhältnis skalieren context.scale(scaleBy, scaleBy);

3.

Nachdem Sie das Gerätepixelverhältnis ermittelt haben, multiplizieren Sie canavs.width und canvas.height mit dem Gerätepixelverhältnis, das scaleBy lautet. Stellen Sie zu diesem Zeitpunkt canvas.style.width und canvas.style.height auf die Breite und Höhe des Doms ein. Überlegen Sie, warum Sie es so schreiben? Schließlich vergrößern Sie beim Zeichnen das Pixelverhältnis des gezeichneten Inhalts um das Vielfache

Beispielsweise beträgt die Gerätebreite und -höhe des iPhone 6S 375 x 667 und das window.devicePixelRatio des 6S = physikalische Pixel/Dips (2=750/375). Sind die Designs, die Designer Ihnen normalerweise geben, also 750 x 1334?

Wenn Sie es also auf einem hochauflösenden Bildschirm im Verhältnis 1:1 zeichnen, wird es verschwommen sein. Sehen Sie sich das Bild selbst an. 6S DPR=2

6 plus DPR = 3

4.

Rufen Sie abschließend canvas.toDataURL("image/png") auf und weisen Sie es image.src zu. Da WeChat keine Bilder speichern kann, können wir nur Bilddateien generieren und die integrierte Funktion „Langdruck“ von WeChat aufrufen, um Bilder im Album zu speichern.

Dies ist das Ende dieses Artikels über die Lösung zum Generieren von Bildern mit JavaScript auf mobilen H5. Weitere relevante Inhalte zum Generieren von Bildern mit JavaScript auf mobilen H5 finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Natives js generiert Bildüberprüfungscode
  • js generiert Bildminiaturen über Canvas
  • Java verwendet Phantomjs, um die Funktion zum Generieren von Bildern zu realisieren
  • Node.JS verwendet reines JavaScript, um die Funktion zum Generieren von Bild- oder Slider-Verifizierungscodes zu verwenden
  • Ein Beispiel für die dynamische Generierung von Bildverifizierungscodes in JSP-Seiten
  • js speichert das von Canvas generierte Bild oder speichert direkt ein Bild
  • Detaillierte Erläuterung der Technologie zum Generieren von Bildüberprüfungscode in der JSP-Entwicklung
  • Verwenden Sie das Captchapng-Modul, um einen Bildüberprüfungscode in Nodejs zu generieren
  • Generieren Sie Webseiten-Schnappschüsse im Bildformat basierend auf Linnux+Phantomjs

<<:  Detaillierte Schritte zum Konfigurieren von my.ini für mysql5.7 und höher

>>:  So erhalten Sie die aktuelle Zeit mit der Funktion time(NULL) und localtime() in Linux

Artikel empfehlen

Das WeChat-Applet implementiert den Wasserfallfluss, Paging, Scrollen und Laden

In diesem Artikel wird der spezifische Code für d...

Natives JS zur Implementierung eines Dropdown-Menüs

Dropdown-Menüs sind auch im wirklichen Leben weit...

Docker-Konfiguration Alibaba Cloud Image Acceleration Pull-Implementierung

Heute habe ich Docker verwendet, um das Image abz...

Zusammenfassung der allgemeinen Bedienungskenntnisse der MySQL-Datenbank

Dieser Artikel fasst gängige Betriebstechniken fü...

3 einfache Möglichkeiten, Karusselleffekte mit JS zu erzielen

In diesem Artikel werden 3 Methoden beschrieben, ...

Heute werde ich einige seltene, aber nützliche JS-Techniken teilen

1. Zurück-Button Verwenden Sie history.back(), um...

Analyse der grundlegenden Verwendung von ul und li

Navigation, kleine Datenmenge Tabelle, zentriert &...

Gründe und Lösungen für die Auswahl des falschen Index durch MySQL

In MySQL können Sie mehrere Indizes für eine Tabe...