Images matricielles (pixels, taille fixée) ou vectorielles (formes géométriques, redimensionnable sans perte de qualité) ; ici on ne s'intéresse qu'aux images matricielles
Sur le web, on n'utilise que des formats compressés (par ex., interdiction d'utiliser BMP !)
La compression peut être avec perte (lossy) ou sans perte sans perte : on peut compresser plusieurs fois, ça ne change rien
24 bits suffisent pour ce que les écrans peuvent afficher et ce que l'œil humain peut distinguer
image/jpeg
.jpg
image/gif
.gif
image/png
.png
Petites comparaisons JPEG-GIF-PNG
Attention à ne pas enregistrer en PNG-24 systématiquement : PNG-8 suffit largement en général pour les images non photographiques, pour lesquelles JPEG est plus adapté
# Conversion d'un PNG-24 vers PNG-8 convert tutu.png png8:resultat.png # Autre façon de faire si la précédente ne marche pas convert tutu.png -type palette resultat.png # Conversion d'un GIF vers PNG-8 (le type palette est implicite) convert toto.gif toto.png
Norme du W3C : SVG, scalable vector graphics
Description de l'image dans un format XML
Understanding SVG Coordinate Systems and Transformations : article très détaillé avec démo interactive pour comprendre les problématiques de viewport, canevas, transformations, etc.
img
Pour insérer une image de contenu dans le HTML : élément <img />
src
, l'URL de l'image (obligatoire)alt
, texte alternatif (obligatoire)width
et height
, les dimensions de l'image, en pixelslongdesc
, URL d'une description textuelle de l'imageusemap
, pour définir des « zones sensibles » dans l'imageet bien d'autres qu'on verra plus tard
src
src
sert à spécifier l'URL de l'image. Principe :
img
avec pour src
l'URL http://example.com/bibi.jpg
alt
est utilisé à la place de l'image
quand il n'est pas possible d'afficher l'image, donc
Attribut obligatoire pour que la page soit valide
Certaines versions d'IE faisaient apparaître le texte alternatif au survol de la souris, mais l'attribut n'est pas fait pour ça (et les autres navigateurs ne le font pas)
utiliser l'attribut global title
pour faire ça attention à l'accessibilité (téléphones)
Les attributs width
et height
permettent d'indiquer la place que prend l'image dans la page.
<img src="toto.jpg" alt="Une photo de Toto"
width="430" height="798" />
Intérêt : le navigateur peut réserver la place dans la page pour l'image, avant de l'avoir récupérée
Très intéressant en cas de connexion lente : évite que la mise en page change à chaque fois qu'une nouvelle image a fini d'être téléchargée
Démo un post expliquant pourquoi c'est logique de mettre les dimensions dans le HTML.Si on donne des dimensions fausses, le navigateur obéit et redimensionne l'image
width
et height
pour faire ça !
Particulièrement vrai pour les miniatures (thumbnails)
Redimensionner soi-même ses images aux tailles voulues !
laisser l'original avec son nom simple (toto.jpg
)
et renommer les versions réduites (toto_thumb.jpg
ou toto_150x65.jpg
)
convert image.jpg -resize 300x image_thumb.jpgcrée l'image
image_thumb.jpg
, de largeur 300 pixels, et de hauteur adaptée pour conserver le ratioÉvidemment, si on veut des images de taille variable (par ex. 50% de la largeur de la page),
ça ne suffit pas… mais de toute façon, dans ce cas, on ne peut pas utiliser les attributs HTML width
et height
,
il faut utiliser du CSS.
L'attribut longdesc
donne l'URL d'une page (ou d'un fragment de la même page) qui décrit l'image.
Destiné principalement aux images qui contiennent des informations, telles que des graphiques.
<a href="http://blogdetoto.com"> <img src="toto.jpg" alt="Lien vers le blog de Toto" /> </a>L'attribut
alt
doit alors être utilisé pour décrire le lien
(recommandation W3C)
Attention, IE ≤ 10 ajoute une bordure bleue aux images qui sont des liens
utiliser border:none
…
… mais se poser la question de l'accessibilité et de l'ergonomie (un lien sur une image peut être difficilement découvrable)
map
La carte des zones sensible est donnée par l'élément map
Chaque zone est déterminée par un élément area
<map name="nom_map"> <area ... /> <area ... /> </map>
usemap
:
<img src="toto.jpg" alt="Photo de Toto" usemap="#nom_map" />Attention, le caractère
#
est nécessairearea
Contient la définition d'une zone
Attribut shape
pour le type de forme :
rect
, circle
, ou poly
pour un polygone
coords
: coordonnées, en pixels, séparées par
des virgules, des points caractérisant la zone
href
, auquel cas l'attribut alt
doit obligatoirement être utilisé, pour spécifier le texte du lienCoordonnées en pixels ⇒ ne marche que si l'image a une taille fixée. Si la taille varie, les zones ne correspondent plus : démo de ce qui se passe
Pour avoir des images mappées responsive, il est nécessaire d'utiliser JavaScript
le plus simple est de faire une image mappée normale et d'ajouter une petite librairie JavaScript qui va la rendre responsive
Un intérêt de cette approche est que l'image mappée fonctionne même sans JS, à condition de ne rendre sa taille variable que si JS est activé
figure
Les éléments img
sont de type inline
On a souvent besoin de les mettre dans un bloc
On peut bien sûr utiliser display:block
figure
,
qui a une sémantique plus précise :
figcaption
, utile
pour indiquer une légende ou des informations d'attribution (photographe, licence…)<figure>
<img src="porto1.jpg" alt="Graffiti dans le sud de Porto" width="181" height="242" />
<img src="porto2.jpg" alt="Balcons dans une rue de Porto" width="181" height="242" />
<img src="porto3.jpg" alt="Chat somnolant au sud de Porto" width="181" height="242" />
<figcaption>
Photos de mon voyage à Porto. Ville emplie de beaux graffitis, balcons loufoques
et chats profitant des quelques ruines derrière la ville.
</figcaption>
</figure>