OVH Cloud OVH Cloud

creation d'image

4 réponses
Avatar
Bernard Loyau
J'essaye de créer une image en PHP avec le code suivant (fichier unique):
<?
function Dessin($w, $h) {
// header("Content-type: image/png");
$im=imagecreate($w,$h);
$blanc=imagecolorallocate($im,0xff,0xff,0xff);
$noir=imagecolorallocate($im,0,0,0);
$string="$w x $h";
imagestring($im,1,10,10,$string,$noir);
$ret=imagepng($im);
// imagedestroy($im);
return $ret;
};
?>
<html>
<head>
</head>
<body>
<h3>essai graphique</h3>
<img src="<? Dessin(400,200); ?>" width='100' height='50'><br>

</body>
</html>


Mais je n'obtiens rien.

pourtant, si je change imagepng($im); en imagepng($im,"test.png"); il me
créé bien l'image sur le disque

qu'ai-je faux?



--
Bernard Loyau
tél. 0870 777 679 (tarif local) ou 04 92 35 06 89
http://bernard.loyau.free.fr

4 réponses

Avatar
Olivier Miakinen

J'essaye de créer une image en PHP avec le code suivant (fichier unique):
^^^^^^^^^^^^^

C'est bien là le problème.

<?
function Dessin($w, $h) {
// header("Content-type: image/png");


Ce que tu as commenté ici, et qui irait dans les entêtes HTTP si tu
utilisais un code séparé pour l'image, tu as besoin de le spécifier
d'une façon ou d'une autre.

[...]
<img src="<? Dessin(400,200); ?>" width='100' height='50'><br>


Cette façon de le spécifier, ce serait une url de type « data », encodée
par exemple en Base 64 : <http://www.ietf.org/rfc/rfc2397.txt>. Avec
bien sûr un surpoids de 33 %, sans compter que l'image ne peut pas être
mise en cache indépendamment du code HTML.

Je cite le tout premier paragraphe du RFC :

<cit. http://www.ietf.org/rfc/rfc2397.txt>
A new URL scheme, "data", is defined. It allows inclusion of small
data items as "immediate" data, as if it had been included
externally.
</>

<traduction approximative>
Un nouveau schéma d'URL, « data », est défini. Il permet l'inclusion
de *petits* items(?) de données, comme s'ils étaient inclus de façon
externe.
</>

C'est moi qui ai souligné *petits*. Une image de dimensions 400×200
n'est *pas* petite, sans compter qu'il est plutôt stupide de la
réduire à l'affichage.

pourtant, si je change imagepng($im); en imagepng($im,"test.png"); il me
créé bien l'image sur le disque

qu'ai-je faux?


Le plus simple est de faire deux fichiers, un pour le code HTML (qui
peut alors être statique) et un pour l'image.

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)

Avatar
Bernard Loyau
bonjour,

Le plus simple est de faire deux fichiers, un pour le code HTML (qui
peut alors être statique) et un pour l'image.


J'ai divisé mon code en 2 fichiers:
- g1.php contient:
<?php
header("Content-type: image/png");
function Dessin($w, $h) {
$im=imagecreate($w,$h);
$blanc=imagecolorallocate($im,0xff,0xff,0xff);
$noir=imagecolorallocate($im,0,0,0);
$string="$w x $h";
imagestring($im,1,10,10,$string,$noir);
$ret=imagepng($im);
// imagedestroy($im);
return $ret;
};
?>

- t1.php contient:
<? include "g1.php"; ?>
<html>
<head></head>
<body>
<h3>essai graphique</h3>
<img src="<? Dessin(400,200); ?>"><br>
</body>
</html>
mais ça ne marche tjs pas.

Firefox m'affiche:

L'image "http://127.0.0.1/Cyril/php/t1.php" ne peut être affichée car elle
contient des erreurs.

Avatar
Olivier Miakinen

Le plus simple est de faire deux fichiers, un pour le code HTML (qui
peut alors être statique) et un pour l'image.


J'ai divisé mon code en 2 fichiers:
- g1.php contient:
<?php
header("Content-type: image/png");
function Dessin($w, $h) {
$im=imagecreate($w,$h);
$blanc=imagecolorallocate($im,0xff,0xff,0xff);
$noir=imagecolorallocate($im,0,0,0);
$string="$w x $h";
imagestring($im,1,10,10,$string,$noir);
$ret=imagepng($im);
// imagedestroy($im);
return $ret;
};


Rajouter ici un truc du genre :
Dessin($_REQUEST['w'], $_REQUEST['h']);
(il faudrait vérifier les paramètres, mais bon, on va dire que c'est une
ébauche).

?>

- t1.php contient:
<? include "g1.php"; ?>


Supprimer la ligne précédente.

<html>
<head></head>
<body>
<h3>essai graphique</h3>
<img src="<? Dessin(400,200); ?>"><br>


Remplacer la ligne précédente par :
<img src="g1.php?&amp;h 0">

</body>
</html>
mais ça ne marche tjs pas.


Et ça aura déjà plus de chances de marcher.

Note que tu n'as pas besoin de t1.php dans un premier temps :
essaye juste l'url <http://127.0.0.1/Cyril/php/g1.php?&h 0>.


Avatar
Calimero
Bernard Loyau wrote:
bonjour,


Le plus simple est de faire deux fichiers, un pour le code HTML (qui
peut alors être statique) et un pour l'image.



J'ai divisé mon code en 2 fichiers:
- g1.php contient:
<?php
header("Content-type: image/png");
function Dessin($w, $h) {
$im=imagecreate($w,$h);
$blanc=imagecolorallocate($im,0xff,0xff,0xff);
$noir=imagecolorallocate($im,0,0,0);
$string="$w x $h";
imagestring($im,1,10,10,$string,$noir);
$ret=imagepng($im);
// imagedestroy($im);
return $ret;
};
?>


Modification à la volée dans Thunderbird, donc très probable que y a
des boulettes de syntaxe de ma petite réorganisation du code...

<?php
header("Content-type: image/png");
function Dessin($w, $h) {
$im=imagecreate($w,$h);
$blanc=imagecolorallocate($im,0xff,0xff,0xff);
$noir=imagecolorallocate($im,0,0,0);
$string="$w x $h";
imagestring($im,1,10,10,$string,$noir);
$ret=imagepng($im);
imagedestroy($im);
return $ret;
}

Dessin(400,200);
exit();
?>

Pour tester que ca marche, tu vas directement sur
http://monsite.com/g1.php et tu dois voir ton image.

- t1.php contient:
<? include "g1.php"; ?>
<html>
<head></head>
<body>
<h3>essai graphique</h3>
<img src="<? Dessin(400,200); ?>"><br>
</body>
</html>



<html>
<head></head>
<body>
<h3>essai graphique</h3>
<img src="g1.php"><br>
</body>
</html>

Tu "appelles" ton script comme si c'était une image comme une autre.

mais ça ne marche tjs pas.


Tout à fait normal. Des données binaires, ca ressemble pas trop à de
l'HTML.

--
@+
Calimero