14. november 2003 - 11:30
Der er
20 kommentarer og 1 løsning
centrere tekst på billede med imagettftext
Kan subj ikke lade sig gøre?? Jeg har et billede, som generere teksten ud fra en streng der bliver sendt til billedet (dynamisk genererede knapper på min nye hjemmeside) F.eks. <img src="button.php?tekst=Gæstebog&type=normal" border="0"> Så skriver den gæstebog på knappen, men den vil ikke centrere teksten... Min kode ser således ud: <? if ($type == "hover") { $_img = "images/button-hover.png"; } else if ($type == "normal") { $_img = "images/button-normal.png"; } $arrImg = GetImageSize($_img); $_width = $arrImg[0]; $_height = $arrImg[1]; header("Content-type: image/png"); header("Expires: Mon, 26 Jul 2067 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); $im = ImageCreateFromPNG($_img); $black = ImageColorAllocate ($im, 0, 0, 0); $fnt = "font/verdana.ttf"; $bredde = strlen($tekst) * imagefontwidth($fnt); $hojde = imagefontheight($fnt); $_w1 = ($_width / 2); $_w2 = ($bredde / 2); $x = $_w1 - $_w2; $_h1 = ($_height / 2); $_h2 = ($hojde / 2); $y = $_h1 + $_h2; imagettftext($im,10,0,$x,$y,$black,$fnt,$tekst); ImagePNG($im); ImageDestroy($im); ?> Nogen der har en idé?? Mvh. Morten
Annonceindlæg fra Cognizant
14. november 2003 - 12:05
#1
Jeg synes det ser rigtigt ud, måske pånær at: $y = $_h1 + $_h2; skulle være: $y = $_h1 - $_h2;
14. november 2003 - 12:12
#2
Nej, den skal rigtigtnok være +... Har nemlig fået den til at centrere lodret, men ikke vandret... :( Det er somom at den ikke kan lave imagefontwidth når det er en TTF den skal skrive med...
14. november 2003 - 12:19
#3
Det virker fint her. $font="c:/windows/fonts/Verdana.ttf"; $size = 11; giver fx 8x5px i størrelse. Måske du skal bruge den fulde sti til fonten, hvis ikke det er det.
14. november 2003 - 12:19
#4
Hos mig centrerer den fint.
14. november 2003 - 12:23
#5
Den kan jo godt finde fonten, og den skriver også fint nok (i kan evt. se hvad jeg mener hvis i kigger på knapperne på
http://www.blackchart.dk/new )
14. november 2003 - 12:24
#6
Der skriver den fint teksten, men centrerer ikke, den starter bare teksten fra samme sted på alle knapperne...
14. november 2003 - 12:24
#7
Prøv med det her.. imagefontheight/width skal bruge nummeret fra imageloadfont, ikke fontens filnavn. Jeg ved ikke om det virker.. Har bare læst i manualen :] $fnt_int=imageloadfont($fnt) $bredde = strlen($tekst) * imagefontwidth($fnt_int); $hojde = imagefontheight($fnt_int);
14. november 2003 - 12:30
#8
Off topic: husk alternativ tekst til dine billeder ;)
14. november 2003 - 12:33
#9
Alternativ tekst?? Hvorfor det??
14. november 2003 - 12:34
#10
Loadfont kan jeg ikke bruge, den kan ikke finde skrift typen, selvom jeg endda giver den, den fulde path til ttf filen...
14. november 2003 - 12:43
#11
hmm.. Jeg kan så ikke hjælpe med skrifttypen..
Det er påkrævet af HTML 4.01 Trans. at angive en alternativ tekst (evt bare en tom tekst), og desuden gør det siden mere brugbar for folk der enten har slået billeder fra, eller surfer med en tekstbaseret browser. *host* lynx *host*
http://validator.w3.org/check?uri=http%3A%2F%2Fwww.blackchart.dk%2Fnew%2F
14. november 2003 - 12:49
#12
Heh...Ja ja...Det kommer det kommer... :D Alt til sin tid...Vil have den til at centrere den sk*de tekst inden jeg laver alt for meget mere ved de knapper...
14. november 2003 - 12:51
#13
Men det må vel osse hænge sammen med hvilken filstørrelse man vælger. Har du evt. prøvet at udskrive værdierne fra imagefontheight/width?
14. november 2003 - 12:55
#14
Bredde: 5 Højde: 8
14. november 2003 - 13:07
#15
Ja, det må jo så gælde for en given størrelse. Nu kan jeg se du bruger 10, men de må jo fylde mere, hvis man fx bruger 24? Så, hvordan det lige hænger sammen er nok humlen i det hele.
14. november 2003 - 13:17
#16
Du kan måske prøve at se på: imagettfbbox().
14. november 2003 - 13:18
#17
Hmmmm...Tror jeg har fundet problemet... Hvert tegn i verdana er jo ikke lige mange px bred, lavde lige en lille test... Gæstebog ville den starte ved 55px inde på billedet Billeder ville den starte ved 55px inde på billedet Gæstebog og billeder fylder ikke lige meget, da tegnene jo ikke er lige brede :(
14. november 2003 - 13:26
#18
Næ, det ses jo tydeligt på dit indlæg, men måske du kan benytte dig af imagettfbbox() anyway så.
14. november 2003 - 13:31
#19
Ja, så først dit indlæg efter jeg havde skrevet mit eget, og har lige fået dit forslag til at virke...Nu vil den centrere... <? if ($type == "hover") { $_img = "images/button-hover.png"; } else if ($type == "normal") { $_img = "images/button-normal.png"; } $arrImg = GetImageSize($_img); $_width = $arrImg[0]; $_height = $arrImg[1]; header("Content-type: image/png"); header("Expires: Mon, 26 Jul 2067 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); $im = ImageCreateFromPNG($_img); $black = ImageColorAllocate ($im, 0, 0, 0); $fnt = "/home/Morten/html/www.blackchart.dk/new/font/verdana.ttf"; $ImgInfo = imagettfbbox(10,0,$fnt,$tekst); $bredde = $ImgInfo[2]; $hojde = imagefontheight($fnt); $_w1 = ($_width / 2); $_w2 = ($bredde / 2); $x = $_w1 - $_w2; $_h1 = ($_height / 2); $_h2 = ($hojde / 2); $y = $_h1 + $_h2; imagettftext($im,10,0,$x,$y,$black,$fnt,$tekst); ImagePNG($im); ImageDestroy($im); ?> Blev den endelige kode...Takker for hjælpen... Hvis du lige smider et svar, så er der points...
14. november 2003 - 13:40
#20
Ok, da. Jeg bruger dette og det centrerer fint efter min overbevisning: $tekst = mysql_result($res, 0); $font="c:/windows/fonts/Verdana.ttf"; $size = 46; $tb = imagettfbbox($size,0,$font,$tekst); $textx = $tb[4]; $texty = $tb[5]; $rotate = 0; $x = 150; $y = 30; $im = imagecreatefromjpeg ("img/first.jpg");// Valgt billede $width = imagesx($im); $height = imagesy($im); $xstart = round(($width/2)-($textx/2)); $ystart = round(($height/2)-($texty/2)); $sort = ImageColorAllocate($im,0,0,0); ImageTTFText($im,$size,$rotate,$xstart,$ystart,$sort,$font,$tekst);
14. november 2003 - 13:41
#21
Ja, $x og $y bruger jeg ikke i dette tilfælde.
Vi tilbyder markedets bedste kurser inden for webudvikling