Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

rotation et copie d'image

4 réponses
Avatar
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.


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
------------------------------------------------------------------------
<d.vanhee@free.frr> - <http://d.vanhee.free.fr/>
"Les utopies sont réalisables. La vie marche vers les utopies"

4 réponses

Avatar
ChP
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?capE

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

Avatar
Olivier Miakinen

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?capE

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.

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;}


Ç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.

$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").

$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

imagesavealpha($dst_img, true);


http://fr3.php.net/manual/fr/function.imagesavealpha.php
(PHP 4 >= 4.3.2, PHP 5)

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)

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.

[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.

Avatar
dvanhee
[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"
Avatar
dvanhee
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