Maison >interface Web >js tutoriel >Comment résoudre les problèmes de CanvasContext2D drawImage() avec Onload et CORS ?

Comment résoudre les problèmes de CanvasContext2D drawImage() avec Onload et CORS ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-14 08:38:15371parcourir

How to Solve CanvasContext2D drawImage() Issues with Onload and CORS?

CanvasContext2D drawImage() Problème : Onload et CORS

Lorsque vous tentez de dessiner une image sur un canevas avant d'obtenir son dataURL, les informations renvoyées peuvent apparaître déficientes, remplies avec de nombreux caractères "A". Ce problème est dû à la nécessité d'attendre la fin du chargement de l'image avant de pouvoir être peinte sur la toile. Pour remédier à ce problème, utilisez le gestionnaire d'événements de chargement pour l'élément image.

Pour résoudre ce problème, mettez en œuvre les étapes suivantes :

  1. Attendez le chargement de l'image : Incluez un gestionnaire d'événements onload pour l'élément image. Cette fonction s'exécutera une fois l'image entièrement chargée.
  2. Dessiner une image sur le canevas : Dans le gestionnaire onload, créez le canevas et dessinez l'image dessus à l'aide de la méthode drawImage.
  3. Obtenir DataURL : Après avoir dessiné l'image, utilisez toDataURL pour récupérer le dataURL.

Un obstacle potentiel est lié au CORS (Cross-Origin Resource Sharing). Pour que context.toDataURL() et context.getImageData fonctionnent de manière transparente, la ressource image doit être obtenue d'une manière compatible avec toutes les origines. Sinon, le canevas sera marqué comme « entaché », empêchant l'accès aux données de pixels. Pour contourner ce problème, respectez les directives suivantes :

  1. Images de même origine :Les images du même serveur ne posent aucun problème.
  2. Images externes - Cross-Origin Header : Assurez-vous que le serveur externe hébergeant l'image active CORS dans ses en-têtes. De plus, définissez img.crossOrigin sur "use-credentials".
  3. Images externes - Requêtes anonymes : Si le serveur autorise les demandes anonymes, définissez img.crossOrigin sur "anonymous".

Il est crucial de noter que les en-têtes CORS proviennent du serveur. L'attribut d'origine croisée signifie uniquement votre intention d'exploiter CORS pour la récupération de données. Si le serveur n'est pas configuré correctement, aucune solution de contournement n'existe.

Dans les rares cas impliquant des images provenant de sources mixtes (propre serveur et serveurs compatibles CORS), envisagez d'utiliser le gestionnaire d'événements onerror. Ce gestionnaire s'activera lorsque l'attribut cross-origin est défini sur « anonyme » sur un serveur non-CORS.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn