Vraag & Antwoord

Webprogrammeren & scripting

[PHP] Font gebruiken met GD Library

7 antwoorden
  • Ik ben inmiddels aan het experimenteren met de GD Library en heb op dit moment een probleem met het importeren van een font. Mijn host draait de GD Library en ondersteunt het gebruik van True Type Fonts (.ttf). Maar bij het laden van zo'n plaatje krijg ik de foutmelding [b:24c0144129]The image "http://www.basje.com/new/images/image.php?username=bas" cannot be displayed, because it contains errors.[/b:24c0144129] Deze foutmelding werd gegenereerd door Netscape, in IE krijg ik simpelweg een rood kruisje. De code die ik heb is als volgt:[code:1:24c0144129]<?php header("Content-type: image/png"); // We maken een GIF/PNG image... $plaatje = ImageCreate(150, 75); // ...van 100 x 75 pixels $zwart = ImageColorAllocate($plaatje, 0, 0, 0); $wit = ImageColorAllocate($plaatje, 255, 255, 255); ImageRectangle($plaatje, 0, 0, 100, 75, $zwart); ImageTTFText($plaatje, 32, 0, 10, 50, $wit, "/new/images/handgotn.ttf", $username); ImagePNG($plaatje); // gebruik hier voor oudere versies dus ImageGIF() ImageDestroy($plaatje); // tenslotte nog even netjes de rommel opruimen ?>[/code:1:24c0144129]Het maken van PNG bestanden wordt ondersteund. De fout wordt veroorzaakt door [b:24c0144129]ImageTTFText(...)[/b:24c0144129], als ik die regel verwijder krijg ik wel een plaatje te zien. Waaraan kan dit liggen? Kan het liggen aan de plek waar het TTF-bestand staat? Waar moet ik deze plaatsen? Iedere hulp is welkom, ik zit vast... :( - Basje.
  • Ik zie zo geen fout, Heb wel een voorbeeld voor je: Deze file heb ik gemaakt om de GD library bij mij te testen, plaats deze code in een bestand en draaien maar. Pas even de volgende vars aan: $pic = "buttonconnect.png"; //Willekeurig plaatje bij mij 180x20 $fontfile = "Arialbd.ttf"; //Font file [code:1:f688fb9943] <? # variables $pic = "buttonconnect.png"; $fontfile = "Arialbd.ttf"; $fontsize = "18"; $fontcolor = "#000000"; $textangle = "0"; $text = (isset($HTTP_GET_VARS['text']) ? rawurldecode($HTTP_GET_VARS['text']) : "OhReally"); # create pic and fontcolor $pic = imagecreatefrompng($pic); $fontcolor = str_replace("#", "", $fontcolor); $fontcolor = imagecolorallocate($pic, hexdec(substr($fontcolor, 0, 2)), hexdec(substr($fontcolor, 2, 2)), hexdec(substr($fontcolor, 4, 2))); # calculate start position $picwidth = imagesx($pic); $picheight = imagesy($pic); list($pos_blx, $pos_bly, $pos_brx, $pos_bry, $pos_trx, $pos_try, $pos_tlx, $pos_tly) = imagettfbbox($fontsize, $textangle, $fontfile, $text); $textwidth = $pos_brx - $pos_blx; $textheight = $pos_bly - $pos_tly; $start_x = ($picwidth - $textwidth) / 2; $start_y = (($picheight - $textheight) / 2) + $textheight; # write text and output image imagettftext($pic, $fontsize, $textangle, $start_x, $start_y, $fontcolor,$fontfile, $text); header("content-type: image/png"); imagepng($pic); imagedestroy($pic); ?> [/code:1:f688fb9943] Marcel
  • Ik gok dat het pad naar het font fout is, je hebt nu "/new/.../...ttf", dat betekend dus dat het font vanaf de root in "/new/.../...ttf" staat en bij hosters is dat in 9999 van de 10000 gevallen niet. Bedoel je niet iets als "new/.../...ttf"? [semi-offtopic] Misschien ligt het trouwens wel aan je commentaar:[code:1:876890cb74]$plaatje = ImageCreate(150, 75); // ...van 100 x 75 pixels[/code:1:876890cb74] Rara wat klopt hier niet :P [/semi-offtopic]
  • Marcel en Bill, beiden bedankt. Dankzij jullie reacties ben ik erachter gekomen wat het probleem was. Blijkbaar kan mijn server het bestand dat het font bevat niet vinden als je een relatieve URL opgeeft, alleen als ik met $_SERVER["DOCUMENT_ROOT"] werk lukt het allemaal perfect. En daar ben ik weer achter gekomen door een aantal foutmeldingen dat het script van Marcel genereerde. Dus nogmaals: bedankt! Het werkt allemaal als een zonnetje. - Basje.
  • Creëerde mijn script errors? Zoals? Hier geeft hij namelijk geen errors als ik hem draai. Even een vraag over hetzelfde onderwerp wat is het verschil tussen TrueType en FreeType als ik namelijk op een Linux installatie php_info() draai dan staat er bij de GD libray Freetype en op mijn windows installatie staat er op TrueType, op Linux werkt dan dus ook mijn (bovenstaand) script niet. Groet, Marcel
  • Het script genereerde een error dat hij het bestand waar het font in staat niet kon vinden, dus toen ik dat had opgelost kreeg ik geen errors meer. En als ik het goed heb begrepen van de PHP site is FreeType een service waarmee je TrueType lettertypen kan gebruiken bij het genereren van plaatjes. - Basje.
  • Ah oke! Ik moet toegeven ik ben een beetje lui geweest, ik had zelf nog nergens gekeken wat het verschil was maar ik denk van nu we het er toch over hebben....

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.