OVH Cloud OVH Cloud

Reduire la resolution d'une image

13 réponses
Avatar
Frederic Vailleau
Bonjour à tous,
Je voudrais réduire la résolution d'une image 300 dpi en 72 dpi.
J'utilise la fonction imagecopyresampled() qui permet de créer des images
avec des dimensions différentes mais je n'arrive pas à savoir comment faire
pour réduire seulement la résolution sans modifier les dimensions de
l'image.
Merci de venir à mon secours !!!
Fred

10 réponses

1 2
Avatar
Olivier Miakinen

Je voudrais réduire la résolution d'une image 300 dpi en 72 dpi.
J'utilise la fonction imagecopyresampled() qui permet de créer des images
avec des dimensions différentes mais je n'arrive pas à savoir comment faire
pour réduire seulement la résolution sans modifier les dimensions de
l'image.


J'ai eu beau chercher dans la doc de PHP, nulle part je ne vois comment
modifier, ni même seulement lire, la résolution d'une image en DPI. Tout
ce que je sais (ou du moins ce que je crois savoir car je ne suis pas un
spécialiste des images), c'est que la résolution est stockée dans le
fichier indépendamment de tout le reste, et que les navigateurs n'en
tiennent pas compte lorsqu'ils affichent un pixel d'image sur un pixel
d'écran.

Une solution serait peut-être d'aller modifier cette valeur directement
dans le fichier par fseek() et fwrite(), si tu sais à quel offset elle
se trouve... mais bon, ça a certainement été déjà fait. As-tu essayé une
recherche par Google ou autre ?

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
P'tit Marcel
Frederic Vailleau wrote:
Bonjour à tous,
Je voudrais réduire la résolution d'une image 300 dpi en 72 dpi.
J'utilise la fonction imagecopyresampled() qui permet de créer des images
avec des dimensions différentes mais je n'arrive pas à savoir comment faire
pour réduire seulement la résolution sans modifier les dimensions de
l'image.



Je suppose que ces images seront ensuite affichées sur le web à travers
un navigateur. Dans ce cas, et sauf erreur, la notion de résolution et
de DPI n'a pas cours. Pour obtenir une résolution maximale, il suffit
d'inclure l'image dans la page sans attribut WIDTH ou HEIGHT.

Cependant, tu peux alléger la taille d'une image au format JPEG en
jouant sur son indice de qualité et/ou sur le nombre de couleurs.

Avatar
Frederic Vailleau
Merci pour ces infos,
Au niveau de l'affichage sur le navigateur, je m'en sors à peu près, mais
mon problème est que je dois proposer le téléchargement des images en 72
dpi, et en 300 dpi.
Les utilisateurs uploadent en 300dpi et je dois générer le 72 ...
C'est pas facile facile !!!
Avatar
BLob
Les utilisateurs uploadent en 300dpi et je dois générer le 72 ...


Je vais peut-être dire une connerie, mais j'ai l'impression qu'avec la
bibliothèque graphique gd2, quand tu demandes la taille d'une image (width
et height), tu reçois la taille en pixels d'une image affichée en 72 dpi,
quelle que soit la résolution du fichier que tu manipules. Un utilisateur
uploade une image de 400x300 pixels en 300pdi. Traité avec la gd2 ton image
est beaucoup plus grande (72dpi). Il suffit de faire un
imagecopyresampled( ) pour "réduire" l'image. Si tu la réduis à 400x300 j'ai
l'impression que ça équivaut à un changement de dpi sans changer la taille
de l'image.

BLob

Avatar
Jaco
Salut,

Je ne suis pas un pro en php, par contre, une image en résolution 300 dpi
reste en 300 dpi même si sa taille en langeur et hauteur change.
La résolution, c'est la concentration de pixels par pouce. Lorsque on réduit
la taille, le système extrapole des zones d'images mais au résultat la
résolution est la même. On a donc moins de pixels en tout puisque on a
réduit l'image mais la concentration par pouce est la même. (Faites le test
avec Paint Shop pro par exemple, vous pouvez redimensionner la largeur , la
hauteur et/ou la résolution).
A+

"BLob" a écrit dans le message de
news:427883ed$0$3551$
Les utilisateurs uploadent en 300dpi et je dois générer le 72 ...


Je vais peut-être dire une connerie, mais j'ai l'impression qu'avec la
bibliothèque graphique gd2, quand tu demandes la taille d'une image (width
et height), tu reçois la taille en pixels d'une image affichée en 72 dpi,
quelle que soit la résolution du fichier que tu manipules. Un utilisateur
uploade une image de 400x300 pixels en 300pdi. Traité avec la gd2 ton
image

est beaucoup plus grande (72dpi). Il suffit de faire un
imagecopyresampled( ) pour "réduire" l'image. Si tu la réduis à 400x300
j'ai

l'impression que ça équivaut à un changement de dpi sans changer la taille
de l'image.

BLob



Avatar
newdb
BLob wrote:
Les utilisateurs uploadent en 300dpi et je dois générer le 72 ...
Je vais peut-être dire une connerie, mais j'ai l'impression qu'avec la

bibliothèque graphique gd2, quand tu demandes la taille d'une image (width
et height), tu reçois la taille en pixels d'une image affichée en 72 dpi,
quelle que soit la résolution du fichier que tu manipules. Un utilisateur
uploade une image de 400x300 pixels en 300pdi. Traité avec la gd2 ton image
est beaucoup plus grande (72dpi). Il suffit de faire un
imagecopyresampled( ) pour "réduire" l'image. Si tu la réduis à 400x300 j'ai
l'impression que ça équivaut à un changement de dpi sans changer la taille
de l'image.


euh...

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 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.

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.
à l'écran (72 dpi) cette image occupera une surface de 2835 pixels par
2126 pixels.

par contre, si on veut la faire s'afficher dans 800 par 600 pixels,
alors il faut la redimensionner ; soit définitivement par réduction du
fichier soit pour l'affichage seulement par codage (proportionnel) des
width="" et height="".

si on réduit le fichier, alors cette "nouvelle" image de 800 par 600,si
downloadée (plus tard) pour impression, couvrira une fois imprimée à 300
dpi une surface de 6,8 centimètres par 5 centimètres (8,5 par 6,3 cm en
240 dpi).
si on veut l'imprimer en 300 dpi une surface de 24 par 18 centimètres,
alors elle aura une résolution de 84,5 dpi (basse résolution,
pixellisation, ...)

pour en revenir à php et gd :
"les utilisateurs upload à 300 dpi" donc c'est un gros fichier, bien
lourd.

avec gd on peut générer un autre fichier plus léger, plus adapté à
l'affichage écran en redimensionnant proportionellement et conserver
l'original pour une réutilisation (c'est le principe de la vignette web
qui pointe sur un fichier haute définition).

on peut aussi (mais c'est définitif car destructif) remplacer le fichier
image original par un fichier image réduit (en passant de 2835 par 2126
pixels à 800 par 600 pixels on perd définitivement 5,3 Mo de données
puisqu'on passe de 5,7 Mo d'informations à 470 Ko seulement).

pour conclure (?) :
peu importe la résolution de l'image, il faut connaitre ses dimensions
en pixels et travailler sur des correspondances et proportionnalités
adéquates en fonction de l'usage que l'on veut en faire.


--
@@@@@
E -00 comme on est very beaux dis !
' `) /
|_ =="


Avatar
Olivier Miakinen

Je ne suis pas un pro en php, par contre, une image en résolution 300 dpi
reste en 300 dpi même si sa taille en langeur et hauteur change.


Tu parles d'expérience, ou bien c'est juste qu'il te semblerait /normal/
que la librairie GD ou GD2 conserve ces valeurs ?

[explications sur la résolution, puis...] (Faites le test avec Paint
Shop pro par exemple, vous pouvez redimensionner la largeur , la
hauteur et/ou la résolution).


En l'occurrence, on se fiche de savoir ce que fait Paint Shop pro. Ce
qui nous intéresse, c'est de savoir quelle valeur met GD ou GD2 quand il
sauve une image qu'il a redimensionnée. Il y a plusieurs possibilités,
mais sans faire le test (et je n'en ai pas fait personnellement, je n'ai
pas le temps en ce moment) on ne peut pas savoir laquelle est la bonne.

Par exemple :
- il met une valeur fixe (ex. 72dpi ou 300dpi) ;
- il met la même valeur que celle du fichier d'origine ;
- il calcule une nouvelle valeur en fonction du coefficient de
réduction ;
- la valeur est aléatoire ;
- ...

"BLob" a écrit dans le message de
news:427883ed$0$3551$

[ citation intégrale de l'article auquel tu réponds ]



Merci de lire <http://www.giromini.org/usenet-fr/repondre.html>.


Cordialement,
--
Olivier Miakinen


Avatar
newdb
Olivier Miakinen <om+ wrote:
En l'occurrence, on se fiche de savoir ce que fait Paint Shop pro. Ce
qui nous intéresse, c'est de savoir quelle valeur met GD ou GD2 quand il
sauve une image qu'il a redimensionnée. Il y a plusieurs possibilités,
mais sans faire le test (et je n'en ai pas fait personnellement, je n'ai
pas le temps en ce moment) on ne peut pas savoir laquelle est la bonne.


il met 72 dpi.

lecture des premiers octets du fichier créé :

FF D8 => SOI marqueur 'Start Of Image'
FF E0 => App0 marqueur
00 10 => longueur marqueur (les 14 suivants + ces 2 , donc 16)
4A 46 49 46 00 => identificateur (JFIF0)
01 01 => version (1.01)
01 => unité de résolution des X et Y :
00 : pas d'unité spécifiée ;
01 : X et Y en point par pouce ;
02 : X et Y en point par centimètre
01 2C => résolution horizontale :
01 2C = 300dpi ;
00 01 = 72dpi
01 2C => résolution verticale :
01 2C = 300dpi ;
00 01 = 72dpi

oualou.

--
@@@@@
E -00 comme on est very beaux dis !
' `) /
|_ =="

Avatar
Olivier Miakinen

lecture des premiers octets du fichier créé :

FF D8 => SOI marqueur 'Start Of Image'
FF E0 => App0 marqueur
00 10 => longueur marqueur (les 14 suivants + ces 2 , donc 16)
4A 46 49 46 00 => identificateur (JFIF0)
01 01 => version (1.01)
01 => unité de résolution des X et Y :
00 : pas d'unité spécifiée ;
01 : X et Y en point par pouce ;
02 : X et Y en point par centimètre
01 2C => résolution horizontale :
01 2C = 300dpi ;
00 01 = 72dpi
01 2C => résolution verticale :
01 2C = 300dpi ;
00 01 = 72dpi


Eh bien voilà qui est excellent ! Allez, je tente d'écrire une fonction
qui change la résolution d'un fichier image (je ne la teste pas).

define("RES_72_DPI", "x00x01x00x01");
define("RES_300_DPI", "x01x2Cx01x2C");

function change_résolution($pathname, $dpi)
{
switch ($dpi) {
case 72: $newres = RES_72_DPI; break;
case 300: $newres = RES_300_DPI; break;
default: return false;
}
$fp = fopen($pathname, "r+b");
if ($fp == false) {
return false;
}
if (fseek($fp, 14, SEEK_SET) < 0) {
fclose($fp);
return false;
}
if (fwrite($fp, $newres) != 4) {
fclose($fp);
return false;
}
fclose($fp);
return true;
}

Avatar
newdb
Olivier Miakinen <om+ wrote:
Eh bien voilà qui est excellent ! Allez, je tente d'écrire une fonction
qui change la résolution d'un fichier image (je ne la teste pas).
define("RES_72_DPI", "x00x01x00x01");
define("RES_300_DPI", "x01x2Cx01x2C");
function change_résolution($pathname, $dpi)
{
switch ($dpi) {
case 72: $newres = RES_72_DPI; break;
case 300: $newres = RES_300_DPI; break;
default: return false;
}
$fp = fopen($pathname, "r+b");
if ($fp == false) {
return false;
}
if (fseek($fp, 14, SEEK_SET) < 0) {
fclose($fp);
return false;
}
if (fwrite($fp, $newres) != 4) {
fclose($fp);
return false;
}
fclose($fp);
return true;
}



???
oui.
et...

je me répète sans doute, mais ça ne changera rien à ton fichier image
(aux données incluses).
ton image une fois ouverte dans un logiciel de traitement d'image aura
les mêmes dimensions et contiendra les mêmes informations.

ce sera la **même**.

je ne saisis pas le but de la manoeuvre.

--
@@@@@
E -00 comme on est very beaux dis !
' `) /
|_ =="

1 2