Librairire GD

boulika Messages postés 58 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 30 octobre 2009 - 18 mai 2006 à 10:48
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 - 18 mai 2006 à 14:13
Bonjour,

Je viens de faire un code qui scan en local toutes les polices et qui fait un apercu des polices sous forme d'une image générée .
Mais mon code à des erreures mais je ne vois pas  ou .

Donc si quelqu'un peut m'aider . Merci

<?php
if ($handle = opendir('C:\WINDOWS\Fonts')) {   while (false !($file readdir($handle))) {
       if ($file != "." && $file != "..") {
          

header("Content-type: image/jpeg");

// Create the image
$im = imagecreatetruecolor(400, 30);

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

// The text to draw
$text = 'Mon texte';
// Replace path by your own font path
$font = "C:\WINDOWS\Fonts"".$file."";

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
//imagedestroy($im);

       }
   }
   closedir($handle);
}
?>

9 réponses

sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
18 mai 2006 à 11:04
salut
dejà
if ($handle = = opendir('C:\WINDOWS\Fonts'))

et peut etre
$font = "C:\WINDOWS\Fonts".$file;
0
boulika Messages postés 58 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 30 octobre 2009
18 mai 2006 à 11:07
Ca marche encore moins ;)
0
sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
18 mai 2006 à 11:09
ah
mais ça ç'est pourtant incorrect
if ($handle = opendir('C:\WINDOWS\Fonts')) non ?
0
boulika Messages postés 58 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 30 octobre 2009
18 mai 2006 à 11:12
non car je défini ma variable $handle je ne la teste pas
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
18 mai 2006 à 11:14
ah ok

il ne te reste plus qu'à faire des echo un peu partout
pour voir le contenu de tes variables
je ne vois pas...
0
boulika Messages postés 58 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 30 octobre 2009
18 mai 2006 à 11:16
ca fait quelques heures que je me prend la tete dessus.
je connais pas bien la librairire GD
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
18 mai 2006 à 12:43
Salut,

Code corriger:

<?php
function valid_ext($file) {
$ext = strtolower(strrev(strstr($file,'.')));
if ($ext == 'ftt.') return true;
else return false;
}

if ($handle = opendir('C:\\WINDOWS\\Fonts')) {
while (false !($file readdir($handle))) {
if ($file != "." && $file != ".." && valid_ext($file)) {

// header("Content-type: image/jpeg");
// Pour du PNG, il faut: image/png

$im = imagecreatetruecolor(400, 30);

$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

$text = 'Mon texte';

$font = 'C:\\WINDOWS\\Fonts\\'.$file;

imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

imagepng($im,'exemple_'.str_replace('.','_',$file).'.png'); // ont enrengistrer au format PNG

imagedestroy($im); // ont alloue de la memoire (free)

}
}
closedir($handle);
}
?>

Parcontre, si tu souhaite tout afficher sur une image,
Alors:
- header('Content-type: image/png'); est à mettre TOUT au debut du script
- imagecreatetruecolor() doit venir APRES header('..');
- Augmenter la taille de l'image principal pour qu'elle puissent contenir toutes les polices.
- imagepng() imagedestroy() est à mettre TOUT à la fin du script
Pour cela tu auras besoin de faire quelques calculs: - la taille du font, et à chaque boucle tu doit incrementer la hauteur du font avec un espace pour les aligners verticalement.

En claire, c'est plus simple de tout decouper en fichiers contenant chacune une police.

Note, $white = imagecolorallocate($im, 255, 255, 255); et imagefilledrectangle($im, 0, 0, 399, 29, $white); ne servent pas à grande chose: une image GD est par defaut: blanche (#FFFFFF).

Bon courage.
0
boulika Messages postés 58 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 30 octobre 2009
18 mai 2006 à 13:59
Ecoutes ben que te dires que 1000 mercis a toi ca marche tres bien tout ca .
Par contre comment faire pour ne pas créer une image en dur et la laisser virtuelle ?

Encore merci
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
18 mai 2006 à 14:13
Là c'est en boucle, tu peux ne poura pas avoir 10 images d'affiler en boucle qui s'affiche (c'est pour sa que je te les ait enrengistrer), tu poura qu'avoir une seul image par fichier (ton navigateur ce dira que ceci est une image, et UNE SEUL):

(en schema:)


header('Content-type: image/png');
imagecreatetruecolor() // calculer la nouvelle HAUTEUR d'elle pour contenir touts les fonts
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
$text = 'Mon texte';
$y = 25; // hauteur, disont que la hauteur d'une police est 20 (+5 pour espacer)
[BOUCLE]
..

imagettftext($im, 20, 0, 11, $y+1, $grey, $font, $text);

imagettftext($im, 20, 0, 10, $y, $black, $font, $text);

..
$y+=25; // incrementation
[BOUCLE]

imagepng()
imagedestroy()

Je n'ait pas du tout tester, mais voila à qoui ressemblerais ton code.
0
Rejoignez-nous