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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Tester et comparer les proportions d'une image 4:3

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

par visualight » 16 mars 2010, 20:42

Je ne sais pas si j'ai bien fait de faire comme ça mais ça marche ... J'ai choisi :
if (!($file_ratio === (4 / 3) || $file_ratio  ===  (3 / 4))) {
$error = 'L\'image n\'est pas exposant de 1024x768 !';
}
J'ai testé et toutes les images en proportions 4:3 ou 4:3 inversée (1024x768 ou 768x1024) s'upload correctement.
Toute autre image ayant des proportions autres que 4:3 sont évitées et un message d'erreur est renvoyé.

Je planche désormais sur une mouture de code capable dintégrer ce test et qui "croperait" les images avec zoom lors de l'upload pour toutes les images hors 4:3

Merci pour tout,
raph

Re: Calculer si une image à une proportion carrée

par Calimero » 16 mars 2010, 20:25

Merci pour l'explication ;)

On va le faire en bon français, c'est + simple :

Ton if() a pour but d'isoler les cas d'erreur du script. Ton script n'accepte donc que des images de ratio 4/3 ou 3/4 uniquement (deux cas OK, tous les autres cas PAS OK).

Les cas d'erreur sont donc déterminés par la règle contraire, cad :

Code : Tout sélectionner

si le ratio de l'image est différent de 3/4 ET que le ratio est différent de 4/3.
Qu'on aurait pu exprimer autrement :

Code : Tout sélectionner

si (le contraire de tout ce qui suit) (le ratio de l'image est égal à 3/4 OU que le ratio est égal à 4/3).
stealth35 avait aussi raison dans l'aide qu'il t'a apportée au départ.

En php comme dans plein de langages de programmation, il est délicat de tester l'égalité d'un nombre à virgule (cela tient à la représentation interne que ton ordinateur fait des nombres à virgule, qui peut être une approximation et non une valeur exacte, ce qui peut faire échouer ton test et te laisser dubitatif). Ce qui fait qu'il faut préférer l'écriture == (4/3) à == 0.6666666666 car tu ne maîtrises pas la représentation interne que php se fait de ce nombre, il vaut donc mieux le laisser le calculer lui-même.

Pour un test encore plus fiable on peut même choisir l'opérateur === (égalité renforcée par contrôle du type, ou égalité stricte) plutôt que ==.

Ce qui nous amène aux équivalents php suivants, choisis celui que tu préfères :
// Ecriture 1
if( $ratio !== (4/3) && $ratio !== (4/3) ) {
 echo "erreur !";
}  

// Ecriture 2
if(!( $ratio === (4/3) || $ratio === (3/4) )) {
 echo "erreur !";
}  

Re: Calculer si une image à une proportion carrée

par visualight » 16 mars 2010, 20:10

Purée :!:

C'est bien ça, il faut changer de place la négation pour l'englober dans toute la vérification !

Merci à vous deux =D> , je me sens moins con et con à la fois :oops:


Dans le titre de mon post je parle d'image carrée mais il s'avère que stealth m'a corrigé car une image carée à une proportion de 1
Moi se sont des images "rectangulaires" (1024x768, etc ...) => 1.33333

Je change le titre du post si tu veux.
Que dois je mettre (vérifier si une image est en 4/3 ou 3/4) ??

Je ne vois pas quoi mettre dans le titre.


Merci,
raph

Re: Calculer si une image à une proportion carrée

par Calimero » 16 mars 2010, 20:05

Salut visualight, (on prend les mêmes et on recommence !)

En fait je suis plongé dans le doute entre cette condition (j'attire ton attention sur le fait que !== veut dire strictement différent, et non strictement égal qui se noterait === ) et le titre de ton post (cf ma dernière édition du post précédent, je n'avais pas vu ta réponse).

Eclaire nous sur ton besoin exact stp :) Image carrée, ou pas, finalement ? (pour moi, carrée c'est sans ambiguité : ratio 1, soit largeur == hauteur)

Re: Calculer si une image à une proportion carrée

par visualight » 16 mars 2010, 20:01

Salut Climero ;)

Je vais te dire comme je la lis :
Si la variable $file_ratio n'est pas égal à 4/3 (1.33333...) OU que la variable $file_ratio n'est pas égal à 3/4 (0.75) ==> on affiche un message d'erreur.

J'ai choisis le OU car la variable $file_ration est différente pour chaque upload.

Même en me relisant, ça me parait correct ... :roll:

:shock: Toutefois ... il est vrai de dire que si la variable n'est pas égal à 1.3333 il serait difficile qu'elle ne soit pas égale à 0.75 !

Je me lance dans les tests ...

raph

Re: Calculer si une image à une proportion carrée

par Calimero » 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 ?

Re: Calculer si une image à une proportion carrée

par stealth35 » 16 mars 2010, 19:50

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

Re: Calculer si une image à une proportion carrée

par visualight » 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))) {}
:( :( :(

Re: Calculer si une image à une proportion carrée

par stealth35 » 16 mars 2010, 19:36

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

Re: Calculer si une image à une proportion carrée

par visualight » 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

Re: Calculer si une image à une proportion carrée

par stealth35 » 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)

Re: Calculer si une image à une proportion carrée

par visualight » 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

Re: Calculer si une image à une proportion carrée

par stealth35 » 16 mars 2010, 18:36

fait un
echo $file_ratio
pour etre sur

Re: Calculer si une image à une proportion carrée

par visualight » 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...

Re: Calculer si une image à une proportion carrée

par stealth35 » 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))