Tester et comparer les proportions d'une image 4:3

Eléphant du PHP | 428 Messages

16 mars 2010, 17:45

Salut,

J'ai un problème avec un code que j'essaye de faire pour tester si une image a une proportion carrée.
Voici ce que j'ai tenté de faire (et qui ne marche pas) => sachant que le ratio de l'image peut me renvoyer deux valeurs différentes.

En effet, si une image à une proportion carrée (paysage), le ratio me donnera la valeur : 1.33333333333. (ex.: 1024x768 => 1.33333333333)
Si une image à une proportion carrée (portrait), le ration me donnera la valeur : 0.75. (ex.: 768x1024 => 0.75)

$file_tmp = $_FILES['Filedata']['tmp_name'];
$file_size = getimagesize($file_tmp);

list($width, $height) = getimagesize($file_tmp);
$file_ratio = $width/$height;

if ($file_ratio !== 1.33333333333 OR $file_ratio !== 0.75) {
 $error = 'Upload interrompu => L\'image n\'a pas de proportions carrées';
}
L'ouput de l'éxécution lors de l'upload d'un fichier me sort toujours : Upload interrompu => L'image n'a pas de proportions carrées.
Donc la vérification de $file_ratio ne fonctionne pas ...

Pourquoi ?

Merci,
raph
Modifié en dernier par visualight le 16 mars 2010, 20:22, modifié 1 fois.

ViPHP
ViPHP | 5462 Messages

16 mars 2010, 17:48

pourquoi "carré" "rectangle plutot"

sinon pour t'as reponse
(4/3) !== 1.33333333333
donc met ( 4 / 3 )

Eléphant du PHP | 428 Messages

16 mars 2010, 18:10

Salut,

Ce que j'aimerai faire c'est tester si la variable $file_ratio n'est pas égale à 1.33333333333 ou pas égale à 0.75.
Donc comparer si 4/3 !== 1.33333333333 ne me sert à rien, je dois comparer $file_ratio.

C'est sans aucun doute une bétise, mais je bloque ...

Merci,
raph

ViPHP
ViPHP | 5462 Messages

16 mars 2010, 18:12

arf c'etait pour te dire que 4 / 3 n'était pas égale a 1.3333333333
donc de comparer ta valeur a 4 / 3
$file_ratio !==  (4 / 3)
#-o




:wink:

Eléphant du PHP | 428 Messages

16 mars 2010, 18:23

OK, merci.

Mais comment je fais si mon image à une proportion carrée dans l'autre sens (ex.: 768 x 1024) ?
Le résultat obtenu au calcul du ratio est de 0.75.

Merci,
raph

ViPHP
ViPHP | 5462 Messages

16 mars 2010, 18:25

ta mis 0.75 t'alleur donc c'est bon
if ($file_ratio  !== (4 / 3) || $file_ratio !==  0.75)
ou
if ($file_ratio  !== (4 / 3) || $file_ratio !==  (3 / 4))

Eléphant du PHP | 428 Messages

16 mars 2010, 18:33

justement non.
J'ai essayé avec 0.75 et (3/4) => ca ne marche pas

if ($file_ratio !== (4/3) OR $file_ratio !== (3/4)) {}
if ($file_ratio !== (4/3) OR $file_ratio !== 0.75) {}

Les images uploadées qui ont une proportion de 4/3 (1.3333333333) passent mais pas celles qui ont une proportion de 3/4 (0.75).
Je ne comprend pas...

ViPHP
ViPHP | 5462 Messages

16 mars 2010, 18:36

fait un
echo $file_ratio
pour etre sur

Eléphant du PHP | 428 Messages

16 mars 2010, 18:52

Pour une image de 768x1024 un echo de la variable $file_ratio me sort bien 0.75 (donc 3/4).
Pourtant impossible d'uploader cette image.

Voici le code correspondant (copié/collé) :
$file_name = $_FILES['Filedata']['name'];
$file_size = getimagesize($file_tmp);
list($width, $height) = getimagesize($file_tmp);
$file_ratio = $width/$height;

if ($file_ratio !== (4 / 3) OR $file_ratio !== (3 / 4)) {
$error = 'Upload interrompu => L\'image n\'a pas de proportions carrées';
}
Je n'obtiens pas l'erreur renvoyée par $error lorsque l'image est en 4/3 (donc upload OK) par contre si une image est en 4/3 inversée (ex.: 768x1024) j'ai l'erreur qui apparait.

Je ne pige plus rien ...


Si quelqu'un a une idée ...

Merci,
raph

ViPHP
ViPHP | 5462 Messages

16 mars 2010, 19:07

t'as essayer comme ca '||' a la place du OR, met bien tes parenthèses entre tes condition sinon
$file_ratio !== (4 / 3) || $file_ratio !==  (3 / 4)

Eléphant du PHP | 428 Messages

16 mars 2010, 19:35

Salut,

Je viens d'essayer avec les "||" à la place de OR et rien n'y fait.
J'ai testé également simplement ceci :
if ($file_ratio !== (3 / 4)) {} ==> Ca marche
if ($file_ratio !== (4 / 3)) {} ==> Ca marche
Par contre tester les deux conditions en même temps ne fonctionne pas
if ($file_ratio !== (4 / 3) || $file_ratio !== (3 / 4)) {}  ==> ne marche pas
if ($file_ratio !== (4 / 3) OR $file_ratio !== (3 / 4)) {}  ==> ne marche pas
Il ne prend pas en compte le OR on dirais puisque en testant une par une ça marche ...

Je ne comprend pas, j'ai toujours testé mes variables comme ça (à peu près) et ça a toujours fonctionné.

Une idée ?
Raph
Modifié en dernier par visualight le 16 mars 2010, 19:38, modifié 1 fois.

ViPHP
ViPHP | 5462 Messages

16 mars 2010, 19:36

if (($file_ratio !== (4 / 3)) || ($file_ratio !== (3 / 4))) {}

Eléphant du PHP | 428 Messages

16 mars 2010, 19:40

Ca non plus ça ne marche pas ...
if (($file_ratio !== (4 / 3)) || ($file_ratio !== (3 / 4))) {}
if (($file_ratio !== (4 / 3)) OR ($file_ratio !== (3 / 4))) {}
:( :( :(

ViPHP
ViPHP | 5462 Messages

16 mars 2010, 19:50

en fait faut faire l'inverse
if(!(($file_ratio === (4 / 3)) || ($file_ratio  === (3 / 4))))
{
	echo 'error';
}

ViPHP
ViPHP | 2287 Messages

16 mars 2010, 19:52

Je pense que l'erreur (logique) vous saute tellement au visage que vous ne la voyez pas 8-)

visualight, tu peux me lire à haute voix (ou juste écrire :) ) la condition de ce if() en bon français stp ? (et te poser au passage, de manière logique, la question de savoir s'il correspond bien à ce qu'il est censé faire ou non.).

EDIT : stealth35 a vu le truc. Soit tu inverses le sens du test avec l'opérateur de négation (!), soit tu remplaces le || (ou) par un && (et).

PS : c'est moi ou il y a une grosse différence entre le fait de filtrer uniquement une image carrée (ratio 1 donc, titre du post), et le fait d'exclure seulement les images qui sont soit au ratio 4/3 soit au ratio 3/4 ?
Modifié en dernier par Calimero le 16 mars 2010, 20:03, modifié 1 fois.
if(!@work()){ Nespresso(); } else { what(); }
______________________________