Inhaltsverzeichnis
Canvas domänenübergreifend
Heim Web-Frontend H5-Tutorial Einführung in die domänenübergreifende Canvas-Lösung

Einführung in die domänenübergreifende Canvas-Lösung

Nov 16, 2018 pm 05:22 PM
canvas html5 javascript

Dieser Artikel bietet Ihnen eine Einführung in die domänenübergreifende Canvas-Lösung. Freunde in Not können darauf verweisen.

Wie löst man das domänenübergreifende Canvas-Problem? Hier zeichnen wir die domänenübergreifenden Probleme und Lösungen auf, die beim Zeichnen mit Canvas auftreten.

Sehen wir uns zunächst die Implementierungsmethode an.

Implementierungsmethode

Das Zielbild besteht im Allgemeinen aus Bild + Text. Unabhängig davon, ob es sich um Bilder unterschiedlicher Größe oder um unvorhersehbare Texte handelt, kann dies mithilfe der Canvas-API-Methoden drawImage und fillText erreicht werden.

Der grundlegende Prozess ist wie folgt:

Den Canvas-Kontext abrufen – ctx

const canvas = document.querySelector(selector)
const ctx = canvas.getContext('2d')
Nach dem Login kopieren

Zeichnen

Ignorieren Sie den Inhalt auf dem Bild und Verwenden Sie direkt drawImage, um es zu zeichnen. Zeichnen Sie einfach auf die Leinwand.

const image = new Image()
image.src = src
image.onload = () => {
    ctx.save()
    // 这里我们采用以下参数调用
    this.ctx.drawImage(image, dx, dy, dWidth, dHeight)
    this.ctx.restore()
}
Nach dem Login kopieren

drawImage bietet drei Möglichkeiten, Parameter zu verwenden. Informationen zur spezifischen Verwendung finden Sie in der MDN-Dokumentation.

Bilddaten abrufen

Rufen Sie die vom HTMLCanvasElement-DOM-Objekt bereitgestellten Methoden toBlob(), toDataURL() oder getImageData() auf.

canvas.toBlob(blob => {
    // 你要的 blob
}, mimeType, encoderOptions)
Nach dem Login kopieren

Der Standardwert von mimeType ist hier image/png. EncoderOptions gibt die Bildqualität an und kann zur Komprimierung verwendet werden, aber das mimeType-Format muss image/jpeg oder image/webp sein.

Canvas domänenübergreifend

Wenn wir unter normalen Umständen das gezeichnete Bild ausgeben müssen, können wir die Methoden toBlob(), toDataURL() oder getImageData() von Canvas aufrufen, um das zu erhalten Bilddaten. Allerdings ist es etwas peinlich, wenn man auf domänenübergreifende Bilder stößt. Folgende Fehler können gemeldet werden:

Failed to execute 'toBlob' on 'HTMLCanvasElement': Tainted canvases may not be exported.
Nach dem Login kopieren
Nach dem Login kopieren

oder

Access to image at 'https://your.image.src' from origin 'https://your.website' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Nach dem Login kopieren
Nach dem Login kopieren

Schauen wir uns zunächst die zweite Situation an.

Access-Control-Allow-Origin
Wenn Sie bestimmte Bildressourcen domänenübergreifend verwenden und der Dienst nicht korrekt auf die Header-Informationen Access-Control-Allow-Origin reagiert, wird die folgende Fehlermeldung gemeldet :

Access to image at 'https://your.image.src' from origin 'https://your.website' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Nach dem Login kopieren
Nach dem Login kopieren

Es bedeutet, dass der domänenübergreifende Zugriff nicht zulässig ist. Dann können Sie versuchen, den Hintergrund den Wert von Access-Control-Allow-Origin in * oder your.website ändern zu lassen oder dieselbe Domäne zu verwenden Ressource stattdessen (denken Sie darüber nach?).

Als nächstes lösen wir die erste Situation.

img.crossOrigin = 'Anonymous'
Um eine Verletzung der Privatsphäre des Benutzers zu vermeiden, die durch das unerlaubte Abrufen von Remote-Website-Informationen (z. B. GPS und andere Informationen) verursacht wird, können Sie beim Anruf nach Exif suchen, um Details zu erhalten toBlob( ), toDataURL() oder getImageData() von Canvas geben einen Sicherheitsfehler aus:

Failed to execute 'toBlob' on 'HTMLCanvasElement': Tainted canvases may not be exported.
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Ihr Bilddienst die domänenübergreifende Verwendung zulässt (falls nicht, lesen Sie den vorherigen Artikel), sollten Sie das Hinzufügen von Add in Betracht ziehen das crossOrigin-Attribut, das heißt:

const image = new Image()
image.crossOrigin = 'Anonymous'
image.src = src
Nach dem Login kopieren

Auf diese Weise können Sie die Bilddaten abrufen. Wenn Sie es nicht finden können, verwenden Sie Ressourcen aus derselben Domäne~

Das obige ist der detaillierte Inhalt vonEinführung in die domänenübergreifende Canvas-Lösung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Tabellenrahmen in HTML Tabellenrahmen in HTML Sep 04, 2024 pm 04:49 PM

Anleitung zum Tabellenrahmen in HTML. Hier besprechen wir verschiedene Möglichkeiten zum Definieren von Tabellenrändern anhand von Beispielen für den Tabellenrand in HTML.

Verschachtelte Tabelle in HTML Verschachtelte Tabelle in HTML Sep 04, 2024 pm 04:49 PM

Dies ist eine Anleitung für verschachtelte Tabellen in HTML. Hier diskutieren wir anhand der entsprechenden Beispiele, wie man eine Tabelle innerhalb der Tabelle erstellt.

HTML-Rand links HTML-Rand links Sep 04, 2024 pm 04:48 PM

Anleitung zum HTML-Rand links. Hier besprechen wir einen kurzen Überblick über HTML margin-left und seine Beispiele sowie seine Code-Implementierung.

HTML-Tabellenlayout HTML-Tabellenlayout Sep 04, 2024 pm 04:54 PM

Leitfaden zum HTML-Tabellenlayout. Hier besprechen wir die Werte des HTML-Tabellenlayouts zusammen mit den Beispielen und Ausgaben im Detail.

HTML-Eingabeplatzhalter HTML-Eingabeplatzhalter Sep 04, 2024 pm 04:54 PM

Leitfaden für HTML-Eingabeplatzhalter. Hier besprechen wir die Beispiele für HTML-Eingabeplatzhalter zusammen mit den Codes und Ausgaben.

Text in HTML verschieben Text in HTML verschieben Sep 04, 2024 pm 04:45 PM

Anleitung zum Verschieben von Text in HTML. Hier besprechen wir eine Einführung, wie Marquee-Tags funktionieren, mit Syntax und Beispielen für die Implementierung.

HTML-geordnete Liste HTML-geordnete Liste Sep 04, 2024 pm 04:43 PM

Leitfaden zur HTML-geordneten Liste. Hier besprechen wir auch die Einführung von HTML-geordneten Listen und Typen sowie deren Beispiele

HTML-Onclick-Button HTML-Onclick-Button Sep 04, 2024 pm 04:49 PM

Anleitung zum HTML-OnClick-Button. Hier diskutieren wir deren Einführung, Funktionsweise, Beispiele und Onclick-Events in verschiedenen Veranstaltungen.

See all articles