Voilà j'ai un formulaire sur mon site qui permet d'uploader des images sur
le serveur. Je dois ensuite stocker en base la taille en cm de cette image,
ainsi que sa resolution en dpi.
Existe-t-il un moyen d'eviter à l'admin de saisir manuellement ces
coordonnées, et de les détecter automatiquement avec PHP ?
Je vous remercie d'avance pour votre réponse.
@++
une image numérique est un fichier qui représente une surface de xx
pixels par yy pixels.
*** peu importe sa résolution (dpi, ppp, ...) ***
ainsi quand on upload un fichier image (disons un scan à 300 dpi d'un
tirage photo 24cm par 18cm), on upload un fichier image de 2835 pixels
par 2126 pixels.
une fois connues les dimensions en pixels de l'image il ne reste qu'à
travailler sur des correspondances et proportionnalités adéquates en
fonction de l'usage que l'on veut en faire.
en php la fonction *** getimagesize *** est ton amie :
getimagesize($mon_image) retourne un tableau de 4 éléments :
getimagesize($mon_image)[0] contient la taille horizontale en pixels.
getimagesize($mon_image)[1] contient la taille verticale en pixels.
getimagesize($mon_image)[2] contient le type de l'image (1 = GIF,
2 = JPG, 3 = PNG, 5 = PSD, 6 = BMP, 7 = TIFF -Ordre des octets Intel,
8 = TIFF -Ordre des octets Motorola-, 9 = JPC, 10 = JP2, 11 = JPX,
12 = JB2, 13 = SWC, 14 = IFF.)
getimagesize($mon_image)[3] contient la chaîne à placer dans les balises
IMG : "height=xxx width=xxx".
donc, un simple
round((getimagesize($mon_image)[0] * 0.85) / 100) te donne un arrondi de
la largeur de ton image en cm pour une résolution de 300dpi
pour conclure, *** il ne te sert à rien *** de stocker en base la
résolution de ton fichier (qui n'en possède aucune intrinsèquement).
seules comptent ses dimensions en pixels.
les connaissant, tu pourras en déduire (en calculer) la taille
d'impression de ton image *** en fonction de la définition/résolution
que tu auras choisie ***.
par exemple, une image de 1181 pixels par 1181 pixels affichera à
l'écran une surface de 1181 pixels par 1181 pixels.
quand on parle de haute définition (300 dpi souvent) c'est par rapport à
l'impression (sur papier souvent).
ainsi, cette image de 1181 pixels par 1181 pixels, une fois imprimée à
la résolution de 300 dpi, couvrira une surface de 10 centimètres par 10
centimètres. mais elle fera (le fichier numérique) toujours 1181 par
1181 pixels.
imprimée à une résolution plus faible (240 dpi) elle occupera une
surface de 12,5 cm par 12,5 cm. et elle fera encore et toujours 1181 par
1181 pixels.
si ça peut t'aider...
--
@@@@@
E -00 comme on est very beaux dis !
' `) /
|\_ =="
OK, merci beaucoup pour ta reponse.
Il y a juste un truc que je ne comprends pas :
quand tu dis que pour obtenir la valeur approximative en cm, il faut faire
cela :
round((getimagesize($mon_image)[0] * 0.85) / 100) pour une image de 300
dpi...
Je voulais savoir d'ou venait le 0.85, et je voulais savoir comment faire si
je voulais faire la même opération pour une reslution de 72 dpi par exemple
?
Merci d'avance...
ah.
dpi = dot per inch :
il te faut donc penser en anglo-saxon...
en pouce (1 pouce égale environ 2,54 centimètres).
donc :
une image de 1000 pixels par 1000 pixels
affichée/imprimée à 100 pixels par pouce
'mesurera' 10 pouces (ou 25,4 centimètres) sur 10
à 300 dpi => 3,3 pouces environ
car 1000 / 300 = 3,333...
à 300 dpi => 8,5 centimètres environ
car 3,333 x 2,54 = 8,4666...
donc la formule (modifiée pour plus de clarté) :
taille image en pixels
------------------------ x 2,54 = taille en cm
résolution sortie en dpi
1000
----- x 2,54 = 35,3 cm environ
72
1000
----- x 2,54 = 8,5 cm environ
300