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

Eléphant du PHP | 428 Messages

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
Modifié en dernier par visualight le 16 mars 2010, 20:19, modifié 1 fois.

ViPHP
ViPHP | 2287 Messages

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)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 428 Messages

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

ViPHP
ViPHP | 2287 Messages

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 !";
}  
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 428 Messages

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