Ga naar inhoud

[PHP] Font gebruiken met GD Library


anoniem

Aanbevolen berichten

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.
Link naar reactie
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
Link naar reactie
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]
Link naar reactie
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.
Link naar reactie
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
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...