Re: Dérapage image_reduire
JLuc <[email protected]>
| Newsgroups | gmane.comp.web.spip.devel |
|---|---|
| Message-ID | <[email protected]> |
Le 28/02/2020 à 08:05, Cerdic a écrit : > 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. Comme tu ne précises pas,je suppose que tu as testé avec scripts ou en tout cas dans le cas "carré" ? J'avais écarté cette manière de corriger avec -0.01 car certes ça règle le pb dans les valeurs testées actuellement, mais je m'étais dit que ça décalait l'erreur en fait : au lieu que l'arrondi dérape sur les valeurs entières c'est pour les valeurs "entières+0.01" que l'erreur d'arrondi sera fatal. Faudrait vérifier. > Maintenant j’hésites à mettre un round. > 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… 1px ça peut sembler chipotage mais dans les suites d'images de dimension identiques comme un portfolio, si une image a 1px de plus en hauteur, elle ne tient pas dans la ligne et ça décale tout le reste. Dans l'exemple donné https://core.spip.net/attachments/download/1140/screenshot.jpg c'est du bootstrap de base. D'ailleurs je suis étonné que ces irrégularités soit pas plus souvent signalées. JL > 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 >