Page 1 sur 1

script générateur d'image

Posté : 02 juin 2007, 22:32
par yuuzhantar
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

Posté : 03 juin 2007, 03:03
par Sékiltoyai
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.

Posté : 03 juin 2007, 09:03
par yuuzhantar
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 ?

Posté : 03 juin 2007, 11:21
par Sékiltoyai
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...

Posté : 03 juin 2007, 16:25
par yuuzhantar
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

Posté : 03 juin 2007, 16:50
par yuuzhantar
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');