Re: Dérapage image_reduire
Cerdic <[email protected]>
| Newsgroups | gmane.comp.web.spip.devel |
|---|---|
| Message-ID | <5d285841-cf56-4ae5-a11d-5fbcb439fe3b@Spark> |
C’est vraiment une histoire d’arrondis car je viens de tester avec un patch de la forme ceil($destWidth-0.01) ceil($destHeight-0.01) et ça corrige aussi toutes les erreurs. Maintenant j’hésites à mettre un round. Il faudrait retourner dans l’historique de ce morceau de code, mais il faudrait creuser profond j’ai peur :( Je pense que l’idée c’est de pas créer une image trop petite quand on va appliquer les rescale derrière : il vaut mieux avoir 1 px de trop que 1px de moins Maintenant si je fais une biblio rapide sur internet des pratiques, je trouve de tout : du ceil, du rien du tout (c’est osé), et du round. Bref, soit on fix a minima avec le ceil corrigé pour les erreurs d’arrondi, soit on est fou et on prend le risque d’un round. Cela dit probablement que l’enjeu est mineur entre les 2 car on manipule des images de plus en plus grandes, et un écart d’1px représente de moins en moins d’erreur relativement à la taille de l’image… Si quelqu’un a un avis, qu’il parle maintenant ou se taise à jamais ! :p -- Cédric Le 27 févr. 2020 à 20:59 +0100, JLuc <[email protected]>, a écrit : > Le 22/02/2020 à 09:45, JLuc a écrit : > > Le 20/02/2020 à 14:23, JLuc a écrit : > > > Le ticket https://core.spip.net/issues/4430 présente le problème : > > > image_reduire{200,200} produit parfois des images de 201px de haut ce qui semble bien peu de différence > > > mais fait déraper grave certaines mises en page : https://core.spip.net/attachments/download/1140/screenshot.jpg > > > > > > Le problème se situe au niveau de image_ratio qui, > > > par exemple recevant (427x427) pour un ratio de 1:1 renvoie (200 x 201) ! > > > > > > C'est à cause d'un ceil, qui fait déraper de 1.0000000000000000 le résultat de certains calculs > > > en raison des précédentes conversions binaires <-> décimal. > > > > > > La solution proposée est simple : remplacer le le ceil par un round : > > > - le round évite ces ripages aux conséquences si disgracieuses > > > - l'erreur maximale d'arrondi avec round est de 0.5 alors qu'elle est de 1 avec ceil > > > > > > Cette correction peut elle être intégrée ? > > > > J'ai déposé sur https://contrib.spip.net/tester_image_ratio un programme de test > > de _image_ratio avec ceil et avec round. > > > > On passe un argument debut par l’url et on teste toutes les valeurs entre debut et debut+100. > > Chacune de ces valeurs $z va être sucessivement la dimension cible de _image_ratio > > pour des valeurs d’entrées allant de $z à $z+100. > > On teste à la fois la fonction qui utilise ceil ET sa version lorsqu'elle utilise round. > > > > Comme c’est un carré, le résultat doit être un carré aussi. > > On compte les erreurs pour ceil et pour round : il y en a plein pour round. > > Je n'en ai jamais trouvé pour round. > > Ceux qui ont lu auront corrigé : c'est pour "ceil" (= le code actuel) qu'il y a plein d'erreur ; > et je n'en ai jamais trouvé pour round (= le fix). > > > > Ça ne teste que les images carrées mais ça suffit à mon avis. > > > > Exemple : 29 d'erreurs pour la dimension cible 1000x1000 testée pour les dimensions d'entrées de 1000x1000 à 1100x1100 > > > > JL > > > > _______________________________________________ > > liste: https://listes.rezo.net/mailman/listinfo/spip-dev > > doc: https://www.spip.net/ > > dev: https://core.spip.net/ > > irc://irc.freenode.net/spip > > > _______________________________________________ > liste: https://listes.rezo.net/mailman/listinfo/spip-dev > doc: https://www.spip.net/ > dev: https://core.spip.net/ > irc://irc.freenode.net/spip