Distortion d’images: la sphèrisation
Bonjour à tous,
Il y a de cela pas mal de temps, l’on m’avait lancé un défi GD que je n’avais su relever directement. Imaginez donc ma peine d’être resté ainsi un peu le bec dans l’eau. Bref, je n’ai jamais perdu de vue ce défi et à force d’y repenser, j’ai fini par me poser à y réfléchir sérieusement.
Comment appliquer une image sur une sphère?
Je vous épargnerai ici les explications sur le code qui vous sera livré plus bas. Sachez juste que l’on par juste du principe que notre image et posé parallèlement au sol, sur la sphère et que notre regard est au zénith de cette dernière. Le but est de plier, froisser, mixer l’image pour arriver à appliquer l’entierté de notre image sur l’hémisphère visible depuis notre position. Afin de mieux comprendre ce que l’on cherche à faire, on peut se demander où devrait aller différents points stratégiques comme les coins de notre image – qui doit par ailleurs être carrée -, la coin supérieur gauche ira ainsi au Nord-Ouest si j’assimile la vue supérieur de ma sphère à une rosace des vents.
Quels paramètres choisir?
Cherchons maintenant ces petits paramètres qui feront que notre code puisse être facilement récupérable. Il y a d’une part le fait de charger une image qui puisse être différente de celle sur laquelle on travaille. Par exemple charger la tête du Père Noël sur une boule qu’on veut ajouter à une image de sapin. Il y a aussi la position de la boule centrée en (cx, cy) pour savoir à quelle hauteur du sapin mettre la boule.
Et le rayon de la boule? Le rayon de la boule n’est pas à fournir! En effet, la boule aura des dimensions similaires à l’image qu’on charge comme texture. Ainsi, lorsque je vous disais que l’image à charger devait être carrée, ce n’est pas tout à fait vrai: si elle est carrée, c’est que la hauteur et la largeur sont identiques ce qui nous donnera une vrai sphère avec un diamètre unique valant ma hauteur/largeur de mon image chargée. Si par contre, cette dernière est rectangulaire, le diamètre en largeur vaudra la largeur de mon image et le diamètre en hauteur vaudra la hauteur de mon image.
Pensez donc à recadrer votre image aux bonnes dimensions avant de l’appliquer sur une sphère.
Il existe encore un paramètre -optionnel- vous permettant de choisir la proportion de votre hémisphère occupée par l’image chargée. Ainsi, une proportion de 0,5 vous donnera l’impression d’une image « bombée », « gonflée », mais qui ne semblera pas appliquée sur sphère.
Un exemple?
Voici le code et le résultat de ce code utilisant ma fonction de sphèrisation disponible le module distortions de ma class image.
-
span class= »st0″>’../image.class.php’"http://www.papanoel.free.fr/noel61.gif"‘tailles’"http://www.brunnvalla.ch/d/images/nikolaus15.jpg"‘tailles’"http://www.papanoel.free.fr/sapin/images1/sapin.gif");
-
$dest->load(‘distortions’
Et pour terminer, différents résultats produits à l’aide de cette fonction copyshere()…