Page 1 sur 1

Rotation d'image...

Posté : 23 déc. 2008, 13:02
par TiTuB
Bien le bonjour !

Je vous éxplique, je tiens une petite galerie en PHP pour mes potes et moi m^eme.
Dernierement, on m'a suggéré de mettre des bouton pour faire tourner les images, histoire qu'elle soit dans le bon sens, ce qui, au fond, n'est pas bete...

Me voila donc à chercher la fonction qui me permettrait de le faire. J'ai trouvé celle-ci : imagerotate.
Cependant, en lisant le manuel http://fr3.php.net/manual/fr/function.imagerotate.php, j'ai cru comprendre que l'image était rapetissé pour pouvoir entrer dans le meme cadre qu'avant rotation... Hors j'aimerais juste qu'elle "bascule", mais sans que ses dimensions change... Je ne sais pas si je suis très claire...

Donc j'aimerais savoir si j'ai bien compris cette histoire de changement de dimension... Et si oui, si il y a une fonction mieux adapté...

Merci d'avance !

Posté : 23 déc. 2008, 13:59
par chrislabricole
Eh bien on te laisse tester :)

Je pense qu'il y à ce genre de chose quand tu mets un angle du genre 30°, où l'image se retrouve pas droite...

Mais les angles comme 90°, 180° et 360°, tu ne devrais pas avoir de problème ;)

Posté : 23 déc. 2008, 14:11
par TiTuB
Je suis en train de tester. Je suis tombé sur un probleme : Call to undefined function imagerotate()...

J'ai vérifié, GD est bien lancé... Je ne comprends pas... Je cherche :)


Mais les angles comme 90°, 180° et 360°, tu ne devrais pas avoir de problème
En y réfléchissant, j'pense que tu dois avoir raison...

Dans la mesure ou ma question intéresserait quelqu'un d'autre, j'vous dis dès que j'ai une réponse.

Posté : 23 déc. 2008, 14:22
par chrislabricole
Oui c'est bizarre, ça viens peut-être de ton hébergeur...
Si tu est en local, n'oublies pas qu'il faut redémarrer le serveur :)

Posté : 23 déc. 2008, 15:02
par TiTuB
On a dépanné le serveur (un pote s'en est occupé)...

Apparement, il a remplacé gd.so par une autre version "bidouillé" qu'il à choppé sur le net... Bug déjà rencontré par plusieurs personne... Je ne peux pas etre plus précis, mes excuses.

Quand à imagerotate, il conserve les bonnes dimensions pour 0, 90, 180, 270°... Dans le cas ou la met en diagonale, l'image de base conserve ses dimensions, mais il l'insère dans un cadre plus grand... Ce qui est normal, vu qu'elle est en diagonale...

Posté : 23 déc. 2008, 15:10
par chrislabricole
Ah bon ? C'est bizarre ce bug :?

Ok, alors c'est bien se que pensé pour la redimension au cas où l'angle serait pas droit :)

Posté : 23 déc. 2008, 15:36
par TiTuB

Code : Tout sélectionner

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 4800 bytes) in /var/www/glabouni/web/site/galerie/rotation.php on line 29
Suis-je le seul à trouver cela abbérant ?

Je traduis par :
Erreur : Tu as le droit à 16 Mo de Ram par script, et là t'en à reclamé 0.0048 !

edit : bon ok, pour une image de 183,4 Ko, 16 Mo de ram ne suffisent pas... En revanche, 32 Mo, ca passe... Lourde la fonction imagerotate()...

Posté : 23 déc. 2008, 15:46
par chrislabricole
Peut-être que tu ne fais pas un imagedestroy() à la fin ? :wink:

Posté : 23 déc. 2008, 16:06
par TiTuB
Le truc, c'est que c'est un script qui ne réalise que cette fonction.
Je crois que la mémoire aloué par un script est libéré à la fin de l'éxecution du-dit script, non ?
Donc le imagedestroy() ne changerait pas grand chose, vu que le pic de consommation de ram dépasse les 16 Mo en éssayant de bidouiller une seule image :)
Mais pour que ca soit propre, je vais ajouter cette commande. Merci :)

En tout cas, j'ai réussi à pondre mon script qui fonctionne correctement :

Code : Tout sélectionner

<?php $bdd = new bdd ; if ($_GET['sens'] == 'd') $angle = 270 ; else if ($_GET['sens'] == 'g') $angle = 90 ; else $angle = 0 ; $id_photo = $_GET['id_photo'] ; /* Passage base de données pour récuperer $chemin_min et $chemin_img */ $source = imagecreatefromjpeg($chemin_img) ; $rotate = imagerotate($source, $angle, 0) ; if (file_exists($chemin_min)) unlink($chemin_min) ; imagejpeg($rotate, $chemin_img, 100) ; imagedestroy($source) ; imagedestroy($rotate) ; header('location: '.$_SERVER['HTTP_REFERER']) ; ?>

Posté : 23 déc. 2008, 16:16
par chrislabricole
Regardes si tu n'aurais pas quelque chose à changer dans ton php.ini ;)
Possible ;)

Posté : 23 déc. 2008, 16:18
par TiTuB
J'ai juste changé cà.

Code : Tout sélectionner

memory_limit = 32M ; Maximum amount of memory a script may consume (16MB)
edit : et galère... Sur une image encore plus grosse, ca merde encore... Du coup, je l'ai passé à 64Mo, mais c'est un chiffre absolument énorme... Je pense que la fonction bug à mort... Malgré les imagedestroy()...