script générateur d'image

Eléphant du PHP | 259 Messages

02 juin 2007, 22:32

bonjour

j'aurais besoin de votre aide
je voudrais créer un script qui génère une image assez spéciale

le but serait assez simple, le script collerait 3 images 15x20 pixels entre elles pour générer une image de 45x20 pixel

Image

les différentes adresses des images possibles serait mises dans un array et sélectionnées aléatoirement

pourriez vous m'aider svp car je ne vois pas du tout comment faire

merci
l'hébergeur gratuit que j'utilisais: http://www.freeheberg.com (pas de limitte de débit, BP, 1à10Go, bdd mysql illimitées )
mainteant je suis chez OVH, payant mais plus adapté à de gros sites

ViPHP
ViPHP | 5924 Messages

03 juin 2007, 03:03

Il y a deux questions ici, la première, c'est comment sélectionner aléatoirement 3 valeurs dans un tableau, la seconde, comment fusionner 3 images avec les conditions que tu as fixé.

Pour la première, tu as une fonction toute faite pour le faire, c'est array_rand().
Pour la seconde, tu as la librairie gd. Il faut que tu utilises les fonctions :
-imagecreatefrompng(), imagecreatefromjpeg(), imagecreatefromgif(), ..., selon le type de l'image. Tu dois l'utiliser pour les 3 images.
-imagecreate() pour créer une nouvelle image aux dimensions souhaitées.
-imagecopy() pour copier une image sur une autre.
-imagepng(), imagejpeg(), imagegif() pour afficher ou enregistrer l'image résultat.

Par contre, si tu as des images distantes, du fait qu'il est long d'accéder à un fichier distant, il est très conseillé de télécharger une fois pour toutes les images sur ton serveur, sans quoi tu vas avoir des gros ralentissements.
Et d'autre part, si tu pouvais générer les images le moins souvent possible, ca t'économisera des ressources.

Eléphant du PHP | 259 Messages

03 juin 2007, 09:03

header ("Content-type: image/jpg"); 
$im1=imagecreatefromjpeg ($ad1);
$im2=imagecreatefromjpeg ($ad2);
$im3=imagecreatefromjpeg ($ad3);
$im = ImageCreateTrueColor (60, 20);
imagecopy ( $im, $im1, 0, 0, 0, 0, 20, 20 );
imagecopy ( $im, $im2, 20, 0, 0, 0, 20, 20 );
imagecopy ( $im, $im3, 40, 0, 0, 0, 20, 20 );
imagejpeg ( $im , NULL,75);
le début est de ce genre la ?
l'hébergeur gratuit que j'utilisais: http://www.freeheberg.com (pas de limitte de débit, BP, 1à10Go, bdd mysql illimitées )
mainteant je suis chez OVH, payant mais plus adapté à de gros sites

ViPHP
ViPHP | 5924 Messages

03 juin 2007, 11:21

le début est de ce genre la ?
La fin est de ce genre là :)
Je préciserais juste certaines choses :
imagejpeg($im , NULL, 75);
Ici, vu que tu spécifies les paramètres par défaut en 2nd et 3eme argument, tu peux les oublier :
imagejpeg($im);
Et au début :
$im1 = imagecreatefromjpeg($ad1); 
$im2 = imagecreatefromjpeg($ad2); 
$im3 = imagecreatefromjpeg($ad3); 
$im = imagecreatetruecolor(60, 20);
Tu vas avoir des problèmes s'il y a une erreur à la création des images, je te conseille de prendre tes précautions :
if(
     ($im1 = imagecreatefromjpeg($ad1))!==false &&
     ($im2 = imagecreatefromjpeg($ad2))!==false && 
     ($im3 = imagecreatefromjpeg($ad3))!==false && 
     ($im = imagecreatetruecolor(60, 20))!==false
)
{
...
}
A part ca je ne vois rien qui cloche, tu n'as plus qu'à passer à la sélection des images, si ce n'est pas déjà fait...

Eléphant du PHP | 259 Messages

03 juin 2007, 16:25

j'ai un petit problème :

voici ma fonction
<?php
header ("Content-type: image/jpg"); 
$possible=array('/images/lettres/a_1.jpg','/images/lettres/g_1.jpg','/images/lettres/n_1.jpg','/images/lettres/p_1.jpg','/images/lettres/y_1.jpg');
$p1=rand(0, 4);
$p2=rand(0, 4);
$p3=rand(0, 0);
$ad1=$possible[$p1];
$ad2=$possible[$p2];
$ad3=$possible[$p3];
if(
     ($im1 = imagecreatefromjpeg($ad1))!==false &&
     ($im2 = imagecreatefromjpeg($ad2))!==false && 
     ($im3 = imagecreatefromjpeg($ad3))!==false && 
     ($im = imagecreatetruecolor(90, 30))!==false
)
{
imagecopy ( $im, $im1, 0, 0, 0, 0, 30, 30 );
imagecopy ( $im, $im2, 30, 0, 0, 0, 30, 30 );
imagecopy ( $im, $im3, 60, 0, 0, 0, 30, 30 );
imagejpeg ( $im , NULL,75); 
}
?>
et quand je l'appelle

Code : Tout sélectionner

<img src="/scripts/image1.php" border=0 />
et se ne marche pas
pourquoi ???

merci
l'hébergeur gratuit que j'utilisais: http://www.freeheberg.com (pas de limitte de débit, BP, 1à10Go, bdd mysql illimitées )
mainteant je suis chez OVH, payant mais plus adapté à de gros sites

Eléphant du PHP | 259 Messages

03 juin 2007, 16:50

réparé
$possible=array('../images/lettres/a_1.jpg','../images/lettres/g_1.jpg','../images/lettres/n_1.jpg','../images/lettres/p_1.jpg','../images/lettres/y_1.jpg');
l'hébergeur gratuit que j'utilisais: http://www.freeheberg.com (pas de limitte de débit, BP, 1à10Go, bdd mysql illimitées )
mainteant je suis chez OVH, payant mais plus adapté à de gros sites