Aller au contenu

police personnalisée


Sujets conseillés

Posté

Salut,

Je cherche à créer une image avec gd.

Assez basique : fond transparent et texte en blanc (viva png).

Je créé donc mon image:

<?php
header ("Content-type: image/png");
$image = imagecreate(250,30);
$orange = imagecolorallocate($image, 255, 128, 0);
$texte = $_GET['t'];
$blanc = imagecolorallocate($image, 255, 255, 255);
$font = imageloadfont("swis.ttf");
imagestring($image, $font, 5, 1, $texte, $blanc);
imagepng($image);
?>

Et là... Ma police swis.ttf n'est pas utilisée, c'est la police php taille 1 (atroce).

Pourquoi ?

On m'a dit que gd n'acceptait que les polices en .gdf.

Mais j'ai déjà vu des générateurs d'images dynamiques qui fonctionnaient avec pas mal de polices ttf...

Et si ce n'est pas possible, je suppose que convertir des ttf en gdf ne l'est pas non plus ?

J'oubliais, quand je mets :

<?php
header ("Content-type: image/png");
$image = imagecreate(250,30);
$orange = imagecolorallocate($image, 255, 128, 0);
$texte = $_GET['t'];
$blanc = imagecolorallocate($image, 255, 255, 255);
$font = imageloadfont("swis.ttf");
if($font === FALSE) { echo 'erreur avec la police'; }
imagestring($image, $font, 5, 1, $texte, $blanc);
imagepng($image);
?>

Firefox me dit qu'il ne peut afficher l'image car elle contient des erreurs, mais l'affichage du code source me met bien "erreur avec la police" en tout début...

Le chemin est bon (le fichier swis.ttf est dans le même répertoire que mon fichier php), les permissions sont bonnes (777)...

Si vous avez une idée du pourquoi... ;)

Merci,

Loupilo.

Posté

Est-ce que ta font ttf respecte bien ce format?

Table 1. Font file format

byte position  C data type  description

byte 0-3  int  number of characters in the font

byte 4-7  int  value of first character in the font (often 32 for space)

byte 8-11  int  pixel width of each character

byte 12-15  int  pixel height of each character

byte 16-  char  array with character data, one byte per pixel in each character, for a total of (nchars*width*height) bytes.

voila les liens qui aident :

manuel PHP : imageloadfont

guide : comment creer une signature dynamique

User-defined Bitmap Fonts

Posté

J'ai déjà eu un problème de ce genre...

Le module Apache qui gère les polices true type est il correctement installé ?

Il s'appelle FreeType de mémoire...

Posté
On m'a dit que gd n'acceptait que les polices en .gdf.

Mais j'ai déjà vu des générateurs d'images dynamiques qui fonctionnaient avec pas mal de polices ttf...

<{POST_SNAPBACK}>

sinon, peut etre que tu te trompe de fonction...

est-ce que la fonction imagettftext ne serait pas plus appropriée?

Posté (modifié)
Est-ce que ta font ttf respecte bien ce format?

voila les liens qui aident :

manuel PHP : imageloadfont

guide : comment creer une signature dynamique

User-defined Bitmap Fonts

<{POST_SNAPBACK}>

Je regarde ça...

[Edit: Je ne comprends rien à ce que c'est... Comment faire pour vérifier si ma police respecte le format ?]

J'ai déjà eu un problème de ce genre...

Le module Apache qui gère les polices true type est il correctement installé ?

Il s'appelle FreeType de mémoire...

<{POST_SNAPBACK}>

Ma foi, je ne dispose que d'un phpinfo, travaillant sur un mutu ; je vais voir ce que je trouve sur FreeType...

[Edit: Aucune trace de FreeType dans le phpinfo...]

sinon, peut etre que tu te trompe de fonction...

est-ce que la fonction imagettftext ne serait pas plus appropriée?

<{POST_SNAPBACK}>

Avec:

<?php
header ("Content-type: image/png");
$image = imagecreate(250,30);
$orange = imagecolorallocate($image, 255, 128, 0);
$texte = $_GET['t'];
$blanc = imagecolorallocate($image, 255, 255, 255);
$font = 'swis.ttf';
imagettftext($image, 20, 0, 5, 5, $blanc, $font, $texte);
imagepng($image);
?>

J'ai:

L'image ne peut être affichée, car elle contient des erreurs.
Modifié par Loupilo
Posté

J'allais poser la même question concernant les polices permises par ImageLoadFont, ayant moi-aussi des problèmes pour charger celle que je souhaite.

Malheureusement, les liens donnés par Vincent (en fait, ceux donnés par php.net) sont peu évocatifs...

Donc, la solution m'intéresse... Je suis ce post...I'm watching you.. :whistling:

xpatval

Posté

Si ton phpinfo() ne renvoie aucune mention de Freetype, cela signifie que le module n'est pas probablement pas ou mal installé et que tu ne pourras pas exploiter toutes les fonctions maniant les ttf dans php (dont GD).

Il faut :

1. Que le module Freetype soit installé (compilation de la librairie C)

2. que php ait été compilé avec le support des ttf ( --with-freetype-dir=DIR pour freetype version 2, et --enable-gd-native-ttf' )

(à vérifier dans les directives de compilation au début de phpinfo

Enfin cela dépend de la version utilisée : je suppose que c'est une GD 2.xx ?

Ensuite, il faut installer correctement les polices ttf...

Posté
Si ton phpinfo() ne renvoie aucune mention de Freetype, cela signifie que le module n'est pas probablement pas ou mal installé et que tu ne pourras pas exploiter toutes les fonctions maniant les ttf dans php (dont GD).

Il faut :

1. Que le module Freetype soit installé (compilation de la librairie C)

2. que php ait été compilé avec le support des ttf ( --with-freetype-dir=DIR pour freetype version 2, et --enable-gd-native-ttf' )

(à vérifier dans les directives de compilation au début de phpinfo

Enfin cela dépend de la version utilisée : je suppose que c'est une GD 2.xx ?

Ensuite, il faut installer correctement les polices ttf...

<{POST_SNAPBACK}>

Bon, ben c'est mort alors, je pense, vu que j'ai pas de trace de freetype...

Et effectivement, GD, c'est la version 2.0.15.

Mais pour installer correctement des ttf sur un mutu, je vois pas comment faire :huh: ?

Posté

En attendant l'hypothétique activation de FreeType, j'ai fait mon code.

Mais je suis persuadé qu'il pourrait être 3 à 4 fois plus léger...

J'aimerais bien savoir comment, et surtout pourquoi :P

<?php
header ("Content-type: image/png");
$image = imagecreate(250,19);
$texte = $_GET['t'];
$couleur = $_GET['c'];
if ($couleur == r) { // Ça me permet d'avoir des tramages différents selon que le fond est bleu ou rouge
$cou = imagecolorresolve($image, 177, 0, 0);
}
elseif ($couleur == b) {
$cou = imagecolorresolve($image, 10, 14, 98);
}
else {
$cou = imagecolorresolve($image, 0, 0, 0);
}
imagecolortransparent($image, $cou);
$blanc = imagecolorallocate($image, 255, 255, 255);
$font = './swis.ttf';
imagettftext($image, 13, 0, 5, 15, $blanc, $font, $texte);
imagepng($image);
imagedestroy($image);
?>

Merci ;)

Loupilo.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...