Berechtigungen für Cross-Origin-Image-Ressourcen (CORS-fähiges Image)

Berechtigungen für Cross-Origin-Image-Ressourcen (CORS-fähiges Image)

Das HTML-Spezifikationsdokument führt das Crossorigin-Attribut für Bilder ein. Durch Festlegen der entsprechenden Header-Informationen CORS können img-Bilder von anderen Websites geladen und in Canvas verwendet werden, als ob sie direkt von der aktuellen Website (aktueller Ursprung) heruntergeladen worden wären.

Einzelheiten zur Verwendung des Crossorigin-Attributs finden Sie unter CORS-Einstellungsattribute.

Was ist „verunreinigte“ Leinwand?

Obwohl es möglich ist, Bilder in der Leinwand ohne CORS-Autorisierung zu verwenden, wird hierdurch die Leinwand beschädigt. Sobald die Leinwand verunreinigt ist, können Sie keine Daten mehr aus der Leinwand extrahieren, was bedeutet, dass Sie keine Methoden wie toBlob(), toDataURL() und getImageData() mehr aufrufen können, da sonst ein Sicherheitsfehler ausgegeben wird.

Dies dient dazu, die persönlichen Daten des Benutzers zu schützen und zu verhindern, dass Bildinformationen des Benutzers ohne Erlaubnis von Remote-Websites geladen werden, was zu einem Verstoß gegen die Privatsphäre führen würde.

(Anmerkung des Übersetzers: Wenn sich der Benutzer bei sozialen Netzwerken wie QQ angemeldet hat und kein Schutz besteht, kann es sein, dass die Website nach dem Öffnen einer bestimmten Website Canvas verwendet, um die Bildinformationen des Benutzers abzurufen und hochzuladen, was zu Datenlecks führt.)

Beispiel: Bild von anderer Site speichern

Zuerst muss der Bildserver den entsprechenden Access-Control-Allow-Origin Antwortheader setzen. Fügen Sie dem Anforderungsheader das crossOrigin-Attribut des img-Elements hinzu. Beispielsweise können Sie für den Apache-Server die Konfigurationsinformationen in HTML5 Boilerplate-Apache-Serverkonfigurationen kopieren, um zu antworten:

<IfModule mod_setenvif.c>
    <IfModule mod_headers.c>
    <FilesMatch "\.(cur|gif|ico|jpe?g|png|svgz?|webp)$">
        SetEnvIf Herkunft ":" IS_CORS
        Header-Satz Access-Control-Allow-Origin "*" env=IS_CORS
    </FilesMatch>
    </IfModule>
</IfModule> 

Wenn diese Einstellungen wirksam sind, können Sie Bilder von anderen Sites wie Ihre eigenen Ressourcen im DOM-Speicher (oder anderswo) speichern.

var img = neues Bild,
    Leinwand = Dokument.createElement("Leinwand"),
    ctx = canvas.getContext("2d"),
    src = "http://example.com/image"; // Spezifische Bildadresse img.crossOrigin = "Anonymous";

img.onload = Funktion() {
    Leinwand.Breite = Bild.Breite;
    Leinwandhöhe = Bildhöhe;
    ctx.drawImage(Bild, 0, 0);
    localStorage.setItem( "savedImageData", canvas.toDataURL("image/png") );
}
img.src = Quelle;
// Stellen Sie sicher, dass zwischengespeicherte Bilder auch das Ladeereignis auslösen, wenn ( img.complete || img.complete === undefined ) {
    img.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
    img.src = Quelle;
}

Browserkompatibilität

Desktop

Besonderheit Chrom Firefox (Gecko) Internet Explorer Oper Safari
Grundlegende Unterstützung 13 8 Keine Unterstützung Keine Unterstützung ?

Mobile

Besonderheit Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Grundlegende Unterstützung ? ? ? ? ?

Siehe auch

Chrome: Verwenden von Cross-Origin-Bildern in WebGL

HTML-Spezifikation - Crossorigin-Attribut

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.

<<:  Detaillierte Erklärung des Unterschieds zwischen dem JavaScript-Spread-Operator und dem Rest-Operator

>>:  Detailliertes Beispiel zum Einfügen benutzerdefinierter HTML-Datensätze im Quill-Editor

Artikel empfehlen

Eine kurze Diskussion über den Spaß von :focus-within in CSS

Ich glaube, einige Leute haben dieses Bild gesehe...

Analyse des Unterschieds zwischen fettgedrucktem <b> und <strong>

Wir alle Webmaster wissen, dass es bei der Optimi...

JS realisiert den Scroll-Effekt von Online-Ankündigungen

In diesem Artikel wird der spezifische JS-Code zu...

Beispiel für eine Methode zum Festlegen von MySQL-Fremdschlüsseln

1. Methode zum Festlegen des Fremdschlüssels 1. U...

PHP-bezogene Pfade und Änderungsmethoden in der Ubuntu-Umgebung

PHP-bezogene Pfade in der Ubuntu-Umgebung PHP-Pfa...

Centos7-Installation des in Nginx integrierten Lua-Beispielcodes

Vorwort Der von mir verwendete Computer ist ein M...

Vue implementiert Drag & Drop für mehrspaltiges Layout

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

Verwenden Sie sauberes HTML-Markup zum Erstellen Ihrer Seiten

Das Internet ist ein Organismus, der sich ständig...

JavaScript implementiert die Verarbeitung großer Datei-Uploads

Beim Hochladen von Dateien, z. B. Videodateien, d...

Detailliertes Beispiel zum Entfernen doppelter Daten in MySQL

Detailliertes Beispiel zum Entfernen doppelter Da...

So können Sie lange Vue-Listen schnell laden

Inhaltsverzeichnis Hintergrund Hauptinhalt 1. Kom...