Je me suis lancer dans la réalisation de la création d'une image avec PHP. Photoshop c'est bien, mais ça deviens vite long quand il faut modifier plusieurs images avec les mêmes paramètres.
Le script fonctionne à merveille à un détail prêt. La police que j'aimerais ne veut pas s'ajouter à mon image et ça peut importe ce que j'utilise
$font = imageloadfont ('../fonts/Lobster.ttf'); Ne marche pas.
$font = '../fonts/Lobster.ttf'; Ne fonctionne pas non plus.
La police de base et trop petite pour ce que j'aimerais faire te n'est pas à mon goût. Pour voir un plein contrôle sur le texte, j'utilise a formule : imagettftext. Mais même avec ça, ça ne fonctionne pas. Pouvez-vous m'aider s'il vous plait ?
Le Code :
<?php
// Transformation de du PHP en Image
header("Content-type: image/png");
// Récupertion du texte
$string = $_GET['text'];
// Création de l'image à partir d'une image déjà faite
$img = imagecreatefrompng("../png/Character_" . $string . "_Card.png");
// Couleur du texte (Blanc)
$couleur = imagecolorallocate($img, 255, 255, 255);
// Couleur de fond du rectangle
$type = imagecolorallocate($img, 128, 126, 76); // Couleur Geo
imagefilledrectangle($img, 0, 1600, 1000, 1778, $type);
// Rectangle
imagesetthickness($img, 10);
imagerectangle($img, 5, 1600, 994, 1772, $couleur);
// Definition de l'emplacement du texte
// $px = 250 + $strx/2; // Largeur
// Fonction pour déterminer le centrage de la chaine de caractères (elle prend comme paramètre : la chaine et la police d'écriture
function centrage_texte($z,$y)
{
// Je calcule le nombre de caractères dans la chaine
$a = strlen($z);
// Je calcule la taille d'un caractère par rapport à la taille de la police
$b = imagefontwidth($y);
// Je calcule la taille de ma chaine de caractères
$c = $a*$b;
// Je calcule combien il me reste de caractères/espace sur les côtés pour centrer mon texte
$d = 1000-$c;
// Je recherche l'emplacement où débutera ma chaine de caractères
$e = $d/2;
// La chaine commencera ... à cet emplacement
return $e;
}
$font = '../fonts/Lobster.ttf';
imagettftext($img, 14, 0, centrage_texte($string,5), 1670, $couleur, $font, $string);
// Afficher l'image ...
imagepng($img);
// ... puis la détruire
imagedestroy($img);
?>
Je confirme que le chemin vers la police est bien le bon. J'ai cherché un peu partout sur internet mais rien ne fonctionne. Le problème viens peut-être de la police, je ne sais pas.
Je viens d'essayer de convertir la police .ttf en .dfont comme tu l'as indiqué au dessus et malheureusement, le problème est toujours présent. C'est assez embêtant. Le problème ne viendrait-il pas du fichier php.ini du serveur WAMP ?
En effet, je viens de voir que la formule nécessite l'extension appeler "freetype" malheureusement, je ne trouve pas comment faire pour l'ajouter sur WAMP.
Toute aide sera la bienvenue et je vous en remercie par avance !
To enable GD-support configure PHP --with-gd[=DIR], where DIR is the GD base install directory. To use the recommended bundled version of the GD library, use the configure option --with-gd. GD library requires libpng and libjpeg to compile. As of PHP 7.4.0, --with-gd becomes --enable-gd (whether to enable the extension at all) and --with-external-gd (to opt into using an external libgd, rather than the bundled one). In Windows, you'll include the GD DLL php_gd.dll as an extension in php.ini. Prior to PHP 8.0.0, the DLL was named php_gd2.dll.
L'extension php_gd2.dll est déjà installé, sinon je ne pourrai pas du tout afficher l'image ..
Mais j'ai beau chercher ce FreeType, je ne le trouve pas. Je l'ai téléchargé sur mon ordinateur, mais je ne sais pas vraiment où le mettre et ce qu'il faut faire de plus pour que le fichier soit pris en compte
Et bien phpinfo() ne me retourne aucune erreur.. mais sur la page, il y a seulement marquer que l'image ne peux pas être renvoyé car elle contient des erreurs. J'aimerais bien savoir où est l'erreur justement mdr. Mais malheureusement, je dois chercher par moi-même. Je sais que l'erreur viens forcément de quelque chose qui est lier à la police donc soit $font soit imagettftext/imagettftext. Je ne vois pas d'autre solution malheureusement
Je me suis trouvé confronté au même probléme il y a peu et je l'ai solutionné en utilisant realpath() de façon à ce que le script trouve bien la ressource.voir https://www.php.net/manual/fr/function.realpath.php si tu ne connaissais pas encore
Mon script génère des epubs et je créer à la volée les images de couverture avec GD, je tri donc mes fonts en deux groupes : ttf et otf pour la couverture généré via la librairie GD et otf,woff,woff2 pour l'epub. Je me sert du même convertisseur que Asmitta t'as indiqué .
Les font ttf et otf ne me posent aucun probléme et mon script tourne aussi bien sous PHP 7+ que 8+
Cdt
P.S. As tu vérifier les coordonnées de function centrage_texte($z,$y) et qu'elles sont bien dans l'image ?
- Edité par gc-nomade 4 mai 2022 à 21:32:35
Quelques ressources pour PluXml, CMS Français sans BDD (XML) github : repos Github amateur, pas dev
Bonjour a tous, un grand merci pour vos réponse malheureusement, ça ne fonctionne toujours pas. On a déjà fait un grand pas en avant avec cette erreur. Il ne détecte pas la police.
Voici l'erreur :
Je vais vous montrer le code actuel, peut-être que vous trouverez l'erreur là ou moi je ne la vois pas ..
<?php
// Transformation du PHP en Image
header("Content-type: image/png");
// Récupertion du texte
$string = $_GET['text'];
// Création de l'image à partir d'une image déjà faite
$img = imagecreatefrompng("../png/Character_" . $string . "_Card.png");
// Couleur du texte (Blanc)
$couleur = imagecolorallocate($img, 255, 255, 255);
// Couleur de fond du rectangle
$type = imagecolorallocate($img, 128, 126, 76); // Couleur Geo
imagefilledrectangle($img, 0, 1600, 1000, 1778, $type);
// Rectangle
imagesetthickness($img, 10);
imagerectangle($img, 5, 1600, 994, 1772, $couleur);
// Definition de l'emplacement du texte
// $px = 250 + $strx/2; // Largeur
// Fonction pour déterminer le centrage de la chaine de caractères (elle prend comme paramètre : la chaine et la police d'écriture
function centrage_texte($z,$y)
{
// Je calcule le nombre de caractères dans la chaine
$a = strlen($z);
// Je calcule la taille d'un caractère par rapport à la taille de la police
$b = imagefontwidth($y);
// Je calcule la taille de ma chaine de caractères
$c = $a*$b;
// Je calcule combien il me reste de caractères/espace sur les côtés pour centrer mon texte
$d = 1000-$c;
// Je recherche l'emplacement où débutera ma chaine de caractères
$e = $d/2;
// La chaine commencera ... à cet emplacement
return $e;
}
$apl_form = centrage_texte($string, 5);
echo realpath('C:\wamp64\\') . PHP_EOL;
echo realpath('/www/Card_GI-PHP/fonts/') . PHP_EOL;
$font_family = './arial.ttf';
imagettftext($img, 5, 0, $apl_form, 1670, $couleur, $font_family, $string);
// Afficher l'image ...
imagepng($img);
// ... puis la détruire
imagedestroy($img);
?>
Voici également le chemin vers le font ainsi que le chemin de là ou se trouve la page php :
Fonts : PHP :
J'ai retiré le Header c'est donc pour ça que j'ai pu avoir l'erreur, Merci Ymox.
Ensuite, pour réponde à ta question gc-nomade, les tailles font bien parti de l'image puisque quand le font par défaut est mis, ça marche.
Désolé pour l'attente de la réponse, merci beaucoup à vous.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Quelques ressources pour PluXml, CMS Français sans BDD (XML) github : repos Github amateur, pas dev