L'une des fonctionnalités les plus amusantes de la toile est la possibilité d'utiliser des images. Ceux-ci peuvent être utilisés pour faire du compositing de photos dynamiques ou utilisé comme décors de graphiques, etc. C'est actuellement le seul moyen d'y ajouter du texte (la spécification ne contient aucune fonction pour dessiner du texte). Les images externes peuvent être utilisées dans n'importe quel format prise en charge par Gecko (par exemple PNG, GIF ou JPEG). D'autres éléments de canevas sur la même page peuvent également être utilisés comme source.
L'une des caractéristiques intéressantes de la toile est qu'elle peut introduire des images, qui peuvent être utilisées pour la synthèse d'images ou la production d'arrière-plan, etc. Actuellement, seul le texte peut être ajouté aux images (la description standard n'inclut pas la fonction du texte de dessin). Tant que les images soutenues par Gecko (comme PNG, GIF, JPEG, etc.) peuvent être introduites dans la toile, et d'autres éléments de toile peuvent également être utilisés comme source de l'image.
L'importation d'images est essentiellement un processus en deux étapes:
L'introduction d'une image ne nécessite que deux étapes simples:
Regardons d'abord la première étape. Il existe essentiellement quatre options disponibles:
Jetons un coup d'œil à la première étape en premier, il y a essentiellement quatre options:
Nous pouvons accéder à toutes les images sur une page en utilisant soit la collection document.images, la méthode document.getElementsByTagName, ou si nous connaissons l'attribut ID de l'image, la méthode document.getElementByid.
Nous pouvons obtenir l'image dans la page (si l'ID de l'élément d'image est connu) via la collection document.images, la méthode document.getElementsByTagName ou la méthode document.getElementByid.
Tout comme avec les images normales, nous accédons à d'autres éléments Canvas à l'aide de la méthode document.getElementsByTagName ou de la méthode document.getElementById. Assurez-vous que vous avez dessiné quelque chose sur la toile source avant de l'utiliser dans votre canevas cible.
Semblable à l'image de la page de référence, utilisez le document.getElementsByTagName ou Document.getElementById Méthodes pour obtenir d'autres éléments de canevas. Mais ce que vous devez présenter, c'est la toile prête.
L'une des utilisations les plus pratiques de celle-ci serait d'utiliser un deuxième élément de canevas comme vision miniature de l'autre plus grande toile.
Une application commune consiste à faire des miniatures pour une autre grande toile.
<Une autre option consiste à créer de nouveaux objets d'image dans notre script. L'échec principal de cette approche est que si nous ne voulons pas que notre script s'arrête au milieu car il doit attendre qu'une image se charge, nous avons besoin d'une forme de préchargement de l'image.
De plus, nous pouvons utiliser des scripts pour créer un nouvel objet d'image, mais le principal inconvénient de cette méthode est que si nous ne voulons pas que le script s'arrête parce que nous attendons le périphérique d'image, nous devons toujours briser la précharge.
Fondamentalement, pour créer un nouvel objet d'image, nous faisons ceci:
Nous pouvons créer des images de la manière simple suivante:
var img = new image (); // Créer une nouvelle image objectImg.src = 'myimage.png'; // définir le chemin source
Lorsque ce script est exécuté, l'image commence à se charger. Si le chargement n'est pas terminé lorsqu'une instruction DrawImage est exécutée, le script s'arrête jusqu'à ce que l'image soit terminée. Si vous ne voulez pas que cela se produise, utilisez un gestionnaire d'événements Onload:
Lorsque le script est exécuté, l'image commence à se charger. Si l'image n'est pas chargée lors de l'appel DrawImage, le script attendra qu'il soit chargé. Si vous ne voulez pas cela, vous pouvez utiliser l'événement Onload:
var img = new image (); // Créer une nouvelle image objectImg.onload = function () {// Exécuter des instructions DrawImage ici} img.src = 'myimage.png'; // définir le chemin sourceSi vous n'utilisez qu'une seule image externe, cela peut être une bonne approche, mais une fois que vous devez suivre plus d'un, nous devons recourir à quelque chose de plus rusé. C'est au-delà de la portée de ce tutoriel pour regarder les tactiques de préchargement de l'image, mais vous pouvez consulter JavaScript Image Preloader pour une solution complète.
Si vous n'utilisez qu'une seule image, cela suffit. Mais une fois que plus d'une image est nécessaire, une méthode de traitement plus complexe est requise, mais la stratégie de préchargement de l'image dépasse le cadre de ce tutoriel. Si vous êtes intéressé, vous pouvez vous référer au préloader de l'image JavaScript.
Une autre façon possible d'inclure des images est via les données: URL. Les URL de données vous permettent de définir complètement une image comme une chaîne de caractères codée Base64 directement dans votre code. Un avantage des URL de données est que l'image résultante est disponible immédiatement sans un autre aller-retour au serveur. (Un autre avantage est qu'il est alors possible d'encapsuler dans un seul fichier tous vos CSS, JavaScript, HTML et vos images, ce qui le rend plus portable à d'autres emplacements.) Certains inconvénients de cette méthode sont que votre image n'est pas mise en cache, et pour les images plus grandes, l'url encode peut devenir assez longue:
Nous pouvons également faire référence à des images via la méthode des données: URL. Les URL de données permet de définir une image dans une chaîne de chaînes codées Base64. L'avantage est que le contenu de l'image est disponible immédiatement sans avoir à contourner le serveur. (Et un autre avantage est qu'il peut encapsuler CSS, JavaScript, HTML et des images ensemble, ce qui est très pratique pour migrer.) L'inconvénient est que les images ne peuvent pas être mises en cache. Si les images sont grandes, les données URL intégrées seront assez longues:
var img_src = 'data: image / gif; base64, r0lgodlhcwalaiaaaaaaaaaaaaaaaaaaaaaiuha + hkcuo4lmnvindo7qyrixigbyaow ==';
Une fois que nous avons une référence à notre objet d'image source, nous pouvons utiliser la méthode DrawImage pour la rendre sur le canevas. Comme nous nous verrons plus tard, la méthode DrawImage est surchargée et a trois variantes différentes. Dans sa forme la plus élémentaire, il ressemble à ceci.
Une fois l'objet graphique source obtenu, nous pouvons le rendre en canevas en utilisant la méthode DrawImage. Il existe trois formes de la méthode DrawImage, et ce qui suit est la plus élémentaire.
Drawimage (image, x, y)où l'image est une référence à notre image ou à notre objet Canvas. X et Y forment la coordonnée sur la toile cible où notre image doit être placée.
où l'image est une image ou un objet en toile, et x et y sont leurs coordonnées de démarrage dans le canevas cible.
Dans l'exemple suivant, j'utiliserai une image externe comme toile de fond d'un graphique de petite ligne. L'utilisation de décors peut rendre votre script considérablement plus petit car nous n'avons pas besoin de dessiner un arrière-plan élaboré. Je n'utilise qu'une seule image ici, donc j'utilise le gestionnaire d'événements Onload de l'objet d'image pour exécuter les instructions de dessin. La méthode DrawImage place la toile de fond sur la coordonnée (0,0) qui est le coin supérieur gauche de la toile.
Dans l'exemple suivant, j'utilise une image externe comme arrière-plan d'une image linéaire. Nous n'avons pas besoin de dessiner un arrière-plan responsable avec l'image d'arrière-plan et d'enregistrer beaucoup de code. Un seul objet d'image est utilisé ici, de sorte que l'action de dessin est déclenchée dans sa fonction de réponse à l'événement Onload. La méthode Drawimage place l'image d'arrière-plan dans le coin supérieur gauche (0,0) de la toile.
functiondraw () {
function draw () {var ctx = document.getElementById ('canvas'). getContext ('2d'); var img = new image (); img.onload = function () {ctx.DrawImage (img, 0,0); ctx.beginPath (); ctx.moveto (30,96); ctx.lineto (70,66); ctx.lineto (103,76); ctx.lineto (170,15); ctx.stroke (); } img.src = 'images / backdrop.png'; }La deuxième variante de la méthode DrawImage ajoute deux nouveaux paramètres et nous permet de placer des images à l'échelle sur la toile.
Une autre variante de la méthode DrawImage est l'ajout de deux paramètres pour contrôler l'image à l'échelle en toile.
Drawimage (image, x, y, largeur, hauteur)où la largeur et la hauteur sont la taille de l'image sur la toile cible.
Dans cet exemple, je vais utiliser une image comme fond d'écran et la répéter plusieurs fois sur la toile. Cela se fait simplement en bouclant et en plaçant les images à l'échelle à différentes positions. Dans le code ci-dessous le premier pour les boucles à travers les lignes, la seconde pour faire boucle les colonnes. L'image est mise à l'échelle d'un tiers de sa taille d'origine qui est de 50 x 38 pixels. Nous verrons comment cela aurait également pu être réalisé, en créant un modèle personnalisé, plus tard dans ce tutoriel.
Dans cet exemple, j'utiliserais une image pour s'étaler en toile de manière répétitive comme l'arrière-plan. Il est également très simple à mettre en œuvre, il suffit de faire une boucle à travers les images zoomées. Voir le code ci-dessous. La première couche de For Loop consiste à répéter les lignes, et la deuxième couche consiste à répéter les colonnes. La taille de l'image est mise à l'échelle à un tiers du 50x38 px d'origine. Cette méthode peut être utilisée pour bien réaliser l'effet des modèles de fond, comme vous le verrez dans le tutoriel suivant.
Remarque : les images peuvent devenir floues lors de la mise à l'échelle ou granuleuse si elles sont trop réduites. La mise à l'échelle est probablement préférable de ne pas faire si vous avez du texte qui doit rester lisible.Remarque: L'image peut devenir obscure ou floue en raison de l'échelle à grande échelle. Si votre image a du texte, il est préférable de ne pas évoluer, car après le traitement, il est très probable que le texte de l'image devienne méconnaissable.
functiondraw () {
function draw () {var ctx = document.getElementById ('canvas'). getContext ('2d'); var img = new image (); img.onload = function () {for (i = 0; i <4; i ++) {for (j = 0; j <3; j ++) {ctx.DrawImage (img, j * 50, i * 38,50,38); }}} img.src = 'images / rhino.jpg'; }La troisième et dernière variante de la méthode DrawImage a huit nouveaux paramètres. Nous pouvons utiliser cette méthode pour trancher des parties d'une image source et les dessiner sur la toile.
La troisième et dernière variante de la méthode DrawImage a 8 nouveaux paramètres pour contrôler l'affichage des tranches.
Drawimage (Image, Sx, Sy, Swidth, Sheight, Dx, Dy, Dwidth, Dheight)La première image de paramètre, tout comme avec les autres variantes, est soit une référence à un objet d'image, soit une référence à un élément de toile différent. Pour les huit autres paramètres, il est préférable de regarder l'image à droite. Les quatre premiers paramètres définissent l'emplacement et la taille de la tranche sur l'image source. Les quatre derniers paramètres définissent la position et la taille sur la toile de destination.
Le premier paramètre est le même que les autres, les deux sont des références à une image ou à une autre toile. Les 8 autres paramètres sont mieux référés au diagramme à droite. Les 4 premiers définissent la position et la taille de la tranche de la source d'image, et les 4 derniers définissent la position d'affichage cible et la taille de la tranche.
Le tranchage peut être un outil utile lorsque vous souhaitez faire des compositions. Vous pourriez avoir tous les éléments dans un seul fichier image et utiliser cette méthode pour combiner un dessin complet. Par exemple, si vous souhaitez créer un graphique, vous pouvez avoir une image PNG contenant tout le texte nécessaire dans un seul fichier et en fonction de vos données pourrait modifier l'échelle de votre graphique sans très difficulté. Un autre avantage est que vous n'avez pas besoin de charger chaque image individuellement.
Le tranchage est un outil puissant pour la synthèse d'image. Supposons qu'il y ait une image contenant tous les éléments, puis vous pouvez utiliser cette méthode pour synthétiser une image complète. Par exemple, si vous souhaitez dessiner un graphique et avoir un fichier PNG avec tout le texte nécessaire sur votre main, vous pouvez facilement modifier le graphique affiché final en fonction des besoins de données réelles. Un autre avantage de cette méthode est que vous n'avez pas besoin de charger chaque image séparément.
Dans cet exemple, je vais utiliser le même rhinocéros que nous l'avons vu ci-dessus, mais maintenant je vais trancher la tête et le composer dans un cadre photo. L'image du cadre d'image comprend un Dropshadow qui a été enregistré comme une image PNG 24 bits. Étant donné que les images PNG 24 bits incluent un canal alpha complet 8 bits, contrairement aux images GIF et 8 bits PNG, je peux la placer sur n'importe quel arrière-plan et je n'ai pas à m'inquiéter d'une couleur mate.
Dans cet exemple, j'ai utilisé l'image de rhinocéros que j'avais utilisée ci-dessus, mais cette fois, je faisais un gros plan de la tête de rhinocéros, puis je le synthétiser dans un cadre photo. Le cadre a un effet d'ombre et est une image enregistrée au format PNG 24 bits. Étant donné que l'image PNG 24 bits est livrée avec un canal alpha complet 8 bits, contrairement à GIF et PNG 8 bits, je peux le mettre comme fond sans se soucier de la couleur sous-jacente.
J'ai adopté une approche différente du chargement des images que l'exemple ci-dessus. Je viens de placer les images directement dans mon document HTML et j'ai utilisé une règle CSS pour les masquer à la vue (affichage: aucun). J'ai attribué aux deux images un attribut d'identification pour les rendre plus faciles à sélectionner. Le script lui-même est très simple. Je dessine d'abord l'image tranchée et mise à l'échelle sur le canevas (première instruction DrawImage), puis place le cadre en haut (deuxième instruction DrawImage).
Je charge l'image d'une manière différente de celle que j'ai utilisée ci-dessus, j'inserte l'image directement dans le HTML, puis le cache à travers CSS (affichage: aucun). J'ai attribué des ID pour les deux images, qui sont pratiques pour une utilisation ultérieure. En regardant le script ci-dessous, c'est assez simple. Tout d'abord, coupez la tête de rhinocéros (le premier dessin) et placez-le sur la toile, puis mettez un cadre photo dessus (le deuxième dessin de dessin).
function draw () {var canvas = document.getElementById ('canvas'); var ctx = canvas.getContext ('2d'); // dessiner Slice CTX.DrawImage (document.getElementById ('Source'), 33,71,104,124,21,20,87,104); // dessiner le cadre CTX.DrawImage (document.getElementById ('Frame'), 0,0);}Dans l'exemple final de ce chapitre, j'ai fait une petite galerie d'art. La galerie se compose d'une table contenant plusieurs images. Lorsque la page est chargée, pour chaque image de la page, un élément canvas est inséré et un cadre est dessiné autour de lui.
Dans mon cas, toutes les images ont une largeur et une hauteur fixes, tout comme le cadre qui est dessiné autour de lui. Vous pouvez améliorer le script afin qu'il utilise la largeur et la hauteur de l'image pour que le cadre s'adapte parfaitement autour.
Le code ci-dessous devrait être explicite. Nous parcourons le tableau d'images et ajoutons de nouveaux éléments de toile en conséquence. La seule chose à noter, pour ceux qui ne connaissent probablement pas le DOM, est probablement l'utilisation de la méthode INSERTBEAVE. Insèrefore est une méthode du nœud parent (une cellule de table) de l'élément (l'image) avant laquelle nous voulons insérer notre nouveau nœud (l'élément Canvas).