Discussion:
rotation et copie d'image
(trop ancien pour répondre)
dvanhee
2008-04-05 19:45:58 UTC
Permalink
Bonjour à tous

Voilà mon problème : je souhaite copié sur une image de fond (rose des
vents) une première image (aiguille) qui a subi une rotation.

J'obtiens bien ce que je veux en local. Mais quand je poste le tout
sur le serveur de Free, c'est la catastrophe. L'aiguille apparaît sur
un fond noir (rectangle résultant de la rotation).

sur le serveur free : http://d.vanhee.free.fr/cartographe/rotate.php?cap=45

Le code n'a bien sur pas changé.
Seules les configurations serveurs diffèrent.
local : PHP 5.2.5 GD 2.0.34
Free : PHP 4.4.3 GD 2.0.28

Mon objectif : trouver une solution pour que cela fonctionne pour les
2 configurations. Malgré de nombreux essais je ne suis pas parvenu à
obtenir de résultats satisfaisants.

Merci d'avance pour vos idées.


le code :
<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {$vars = $_POST;} else if
($_SERVER["REQUEST_METHOD"] == "GET") {$vars = $_GET;}

$cap_a_dessiner = $vars[cap];

$src_img = imagecreatefrompng('images/rose/fleche3.png');
$rose = imagecreatefrompng('images/rose/rose3.png');

$srcsize = getimagesize('images/rose/fleche3.png');
$dest_x = $srcsize[0];
$dest_y = ($srcsize[0] / $srcsize[0]) * $srcsize[1];

$dst_img = imagecreatetruecolor($dest_x, $dest_y);
imagealphablending( $dst_img, false);
imagesavealpha($dst_img, true);

imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_x, $dest_y,
$srcsize[0], $srcsize[1]);

imagedestroy($src_img);

$degrees = 360 - $cap_a_dessiner;
$rotate = imagerotate($dst_img, $degrees, -1);

imagedestroy($dst_img);

// taille image ratate : imagesx et imagesy
$rosesize = getimagesize('images/rose/rose3.png');
$x = ($rosesize[0] - imagesx($rotate))/2;
$y = ($rosesize[1] - imagesy($rotate))/2;
imagecopy($rose, $rotate, $x,$y,0,0, imagesx($rotate),
imagesy($rotate));

header('Content-type: image/png');
imagepng($rose);
imagedestroy($rose);
?>


Domimnique
------------------------------------------------------------------------
<***@free.frr> - <http://d.vanhee.free.fr/>
"Les utopies sont réalisables. La vie marche vers les utopies"
ChP
2008-04-05 20:22:48 UTC
Permalink
Post by dvanhee
Bonjour à tous
Voilà mon problème : je souhaite copié sur une image de fond (rose des
vents) une première image (aiguille) qui a subi une rotation.
J'obtiens bien ce que je veux en local. Mais quand je poste le tout
sur le serveur de Free, c'est la catastrophe. L'aiguille apparaît sur
un fond noir (rectangle résultant de la rotation).
sur le serveur free : http://d.vanhee.free.fr/cartographe/rotate.php?cap=45
Le code n'a bien sur pas changé.
Seules les configurations serveurs diffèrent.
local : PHP 5.2.5 GD 2.0.34
Free : PHP 4.4.3 GD 2.0.28
Mon objectif : trouver une solution pour que cela fonctionne pour les
2 configurations. Malgré de nombreux essais je ne suis pas parvenu à
obtenir de résultats satisfaisants.
Merci d'avance pour vos idées.
Vous pouvez activer le php5 (version 5.1.3) sur le site Free en plaçant
à la racine de votre site un fichier .htaccess contenant la simple
indication suivante :

php 1

Cordialement.

Pierre
Olivier Miakinen
2008-04-05 20:22:48 UTC
Permalink
Post by dvanhee
Voilà mon problème : je souhaite copié sur une image de fond (rose des
vents) une première image (aiguille) qui a subi une rotation.
J'obtiens bien ce que je veux en local. Mais quand je poste le tout
sur le serveur de Free, c'est la catastrophe. L'aiguille apparaît sur
un fond noir (rectangle résultant de la rotation).
sur le serveur free : http://d.vanhee.free.fr/cartographe/rotate.php?cap=45
Le code n'a bien sur pas changé.
Seules les configurations serveurs diffèrent.
local : PHP 5.2.5 GD 2.0.34
Free : PHP 4.4.3 GD 2.0.28
Merci pour ces précisions, elles devraient être utiles.
Post by dvanhee
Mon objectif : trouver une solution pour que cela fonctionne pour les
2 configurations. Malgré de nombreux essais je ne suis pas parvenu à
obtenir de résultats satisfaisants.
Merci d'avance pour vos idées.
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {$vars = $_POST;} else if
($_SERVER["REQUEST_METHOD"] == "GET") {$vars = $_GET;}
Ça c'est bien trop compliqué pour une chose qui est bien utile, à savoir
chercher les variables dans $_POST ou dans $_GET selon le type de la
requête. À moins d'un cas très tordu, la variable $_REQUEST fait ce que
tu veux.
Post by dvanhee
$cap_a_dessiner = $vars[cap];
Donc :
$cap_a_dessiner = $_REQUEST['cap'];

Attention, en outre tu faisais l'erreur d'oublier les guillemets autour
de 'cap' (ou "cap").
Post by dvanhee
$src_img = imagecreatefrompng('images/rose/fleche3.png');
$rose = imagecreatefrompng('images/rose/rose3.png');
$srcsize = getimagesize('images/rose/fleche3.png');
$dest_x = $srcsize[0];
$dest_y = ($srcsize[0] / $srcsize[0]) * $srcsize[1];
$dst_img = imagecreatetruecolor($dest_x, $dest_y);
imagealphablending( $dst_img, false);
http://fr3.php.net/manual/fr/function.imagecreatetruecolor.php
http://fr3.php.net/manual/fr/function.imagealphablending.php
(PHP 4 >= 4.0.6, PHP 5), GD2
Post by dvanhee
imagesavealpha($dst_img, true);
http://fr3.php.net/manual/fr/function.imagesavealpha.php
(PHP 4 >= 4.3.2, PHP 5)
Post by dvanhee
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_x, $dest_y,
$srcsize[0], $srcsize[1]);
http://fr3.php.net/manual/fr/function.imagecopyresampled.php
(PHP 4 >= 4.0.6, PHP 5)
Post by dvanhee
imagedestroy($src_img);
$degrees = 360 - $cap_a_dessiner;
$rotate = imagerotate($dst_img, $degrees, -1);
http://fr3.php.net/manual/fr/function.imagerotate.php
(PHP 4 >= 4.3.0, PHP 5)

C'est quoi ce paramètre à -1 ?

<cit.>
bgd_color
Spécifie la couleur des zones qui seront découvertes après la rotation.
</cit.>

En version originale :

http://fr3.php.net/manual/en/function.imagerotate.php
<cit.>
bgd_color
Specifies the color of the uncovered zone after the rotation
</cit.>

On dirait bien que ça pourrait être l'origine du problème. Voyons dans
les commentaires :

<cit.>
the solution barbarism at oscillatewildly dot com came up with to use -1
to preserve transparency apparently only works if you have PHP5 settings
on your host.
(This took me 2 days to figure out. I hope I save someone else that time.)

My settings:
PHP Version: 5.2.2
GD Version: bundled (2.0.34 compatible)
</cit.>

BINGO !

Mettre -1 semblait une solution pour sauvegarder la transparence, mais
cette solution ne marche qu'en PHP5.
Post by dvanhee
[coupe du reste]
Bon, donc ça ne marche pas sur free.fr, mais c'est parce que tu es
en PHP4.

Question : n'y aurait-il pas PHP5 chez Free ?

Réponse : http://www.google.fr/search?q=free.fr+php5
==> http://scullder.free.fr/phpinfo.php5

Il suffit donc apparemment de suffixer tes scripts par .php5 pour avoir
accès à PHP 5.1.3RC4-dev. Enfin... si c'est bien la version de PHP qui
pose problème, parce que GD est toujours en 2.0.28.
dvanhee
2008-04-06 15:18:47 UTC
Permalink
Merci pour vos reponses.

J'ai testé rapidement les deux solutions mais sans succès.
Y aurait il un délai à l'activation de PHP5.

Si je place le fichier .hraccess à la racine les pages ne sont plus
accessibles :
"Erreur 500 - Erreur interne du serveur"

Si j'utilise l'extension .php5 pour le fichier qui m'intéresse : il
n'y a apparemment plus d'interprétation php.

Domimnique
dvanhee
2008-04-06 15:18:47 UTC
Permalink
[RESOLU]


Le problème d"erreur 500 ne provenait pas d'un délai d'activation mais
seulement d'un problème d'encodage du fichier .htaccess.

Je me fais avoir tout le temps. Mon éditeur encode par défaut en UTF8.
Il faut simplement que je lui spécifie UTF8 no BOM.

Je suis bien passé en PHP Version 5.1.3RC4-dev. la rotation fonctionne
correctement.

Merci pour votre aide.

Domimnique
------------------------------------------------------------------------
<http://cartographe.vanhee.fr/>
"Les utopies sont réalisables. La vie marche vers les utopies"

Continuer la lecture sur narkive:
Loading...