Bonjour,
boteha_2 a écrit :
Admettons que la taille réelle de l'image soit : ...
Mise à part la question de la réservation de place soulignée par Raphaël un peu plus haut (qui a du sens si l'image SVG est dans un fichier à part, donc susceptible d'être affiché en léger différé), il n'y a pas vraiment de "taille réelle en pixel" pour les images SVG.
boteha_2 a écrit :
Mais, encore une fois, j'aimerais savoir comment procède un navigateur pour redimensionner une image vectorielle.
Ça dépend des machines, des OS et des navigateurs. Pour s'en convaincre, on peut par exemple essayer d'afficher une image svg représentant une grille composée de fines lignes. Ensuite, on peut s'amuser à la zoomer ou la réduire par divers moyens (via ses dimensions dans le svg, ou dans le html, ou via le navigateur, ou via le css, etc.). Même si on se débrouille pour que ces fines lignes aient à un moment exactement 1px "logique" d'épaisseur, les surprises restent nombreuses (ça fait plusieurs dizaines d'années que je m'esquinte la santé à essayer de dessiner des grilles dans une page web et de ne plus avoir de telles surprises, mais ça rate toujours
. Pour ceux qui seraient intéressés par un exemple concret, voir
https://jeudego.org/maxiGos/_maxigos/_sample/?lang=fr).
Un point noir n'est pas toujours un pixel noir, loin s'en faut. Et c'est difficile à prédire en toutes circonstances.
QuentinC a écrit :
La définition du pixel, c'est, en gros, la plus petite unité indivisible affichable sur un écran quel qu'il soit ... Du coup à quoi ça sert de spécifier des tailles en pixels non entières ? Sachant qu'elles seront nécessairement arrondies, par définition.
. Ça peut avoir du sens d'avoir des tailles en pixel non entières car il y a pas mal de cas où les navigateurs ou les OS doivent bricoler avec les arrondies. Par exemple :
- certains écrans (comme les écrans retina) peuvent avoir plus de 1 pixel "physique" pour afficher un pixel "logique" (le pixel "logique" étant celui qu'on utilise dans les codes html ou css). Classiquement, un écran retina utilise 4 pixels physiques pour afficher un pixel logique. Certains écrans bricolent en plus avec les couleurs primaires (rouge, vert, bleu) pour améliorer le rendu. Et il y a certainement d'autres combines du même genre. En conséquence, une image composées de fines lignes ayant des coordonnées non entières peuvent quand même apparaitre nettes sur ce type d'écran.
- si on a une image ayant un nombre de pixels impair et qu'on essaie de la centrer dans une fenêtre ayant une dimension en nombre de pixels pair, le résultat est au bon vouloir des codeurs des navigateurs ou des OS (image décalée d'un demi-pixel vers la gauche ou vers la droite ou utilisation de couleurs modifiées via des dégradés ?). Cerise sur le gâteau, si on décale ensuite la fenêtre de seulement 1 pixel logique sur l'écran, bien malin serait celui capable de prédire le résultat. D'une manière générale, rien ne garantit qu'un pixel logique ayant des coordonnées entières sera bien affiché tel quel sur un pixel physique de l'écran.
- contrairement aux images pixelisées (du genre PNG ou autres), un point à l'indice (0,0) d'un SVG est pile poil sur la bordure de l'image SVG (si on suppose que la viewBox du SVG a pour origine le point (0,0) et qu'il n'y a pas de combines altérant ça). Si on dessine une ligne noire de 1 de large (en unités SVG) sur la bordure du SVG et qu'on se débrouille pour que la taille finale en pixel logique de l'image soit identique à la taille de la viewBox du SVG, on ne verra que la moitié de la ligne (s'il s'agit d'une ligne noire, on verra en conséquence la plupart du temps plutôt une ligne gris pale). L'autre moitié de la ligne existe mais est cachée car considérée comme étant en dehors de la viewBox. Alors qu'on verra une ligne noire entière si c'est une image PNG. C'est pourquoi on peut trouver dans un SVG pas mal de coordonnées non entières même si par ailleurs l'auteur souhaitait faire une image "au pixel près", l'idée pour une ligne verticale ou horizontale étant justement de la décaler de 0.5 en unité SVG pour obtenir un meilleur rendu. En supposant que la taille définie par la viewBox du SVG corresponde exactement à la taille de l'image en pixel logique, on augmente alors les chances qu'une ligne apparaisse "nette" à l'écran.
- si l'utilisateur zoome l'image, ce qui n'était qu'une portion de pixel dans le code peut devenir un pixel entier. C'est justement une des forces du SVG que de s'adapter au mieux en cas de zoom, quelque soit les tailles en pixel définies dans la page web pour les afficher à l'écran.
- les mobiles zooment eux-aussi les images. Un pixel "logique" défini dans le code de la page web ne correspondra pas à un pixel physique du mobile.
- les imprimantes ont en général une meilleure définition que les écrans. Un pixel "logique" de l'écran sera affiché par plusieurs "points" sur le papier. En conséquence, l'imprimante sera capable d'afficher parfaitement certaines lignes ayant pourtant moins de 1 pixel logique de large.
Bref, toute prédiction en la matière est assez compliquée.
Amicalement,
Modifié par parsimonhi (18 Aug 2023 - 03:13)