Avatar billede jps2mt Nybegynder
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
Avatar billede detox Nybegynder
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;
Avatar billede jps2mt Nybegynder
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...
Avatar billede detox Nybegynder
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.
Avatar billede detox Nybegynder
14. november 2003 - 12:19 #4
Hos mig centrerer den fint.
Avatar billede jps2mt Nybegynder
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)
Avatar billede jps2mt Nybegynder
14. november 2003 - 12:24 #6
Der skriver den fint teksten, men centrerer ikke, den starter bare teksten fra samme sted på alle knapperne...
Avatar billede xyborx Nybegynder
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);
Avatar billede xyborx Nybegynder
14. november 2003 - 12:30 #8
Off topic: husk alternativ tekst til dine billeder ;)
Avatar billede jps2mt Nybegynder
14. november 2003 - 12:33 #9
Alternativ tekst?? Hvorfor det??
Avatar billede jps2mt Nybegynder
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...
Avatar billede xyborx Nybegynder
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
Avatar billede jps2mt Nybegynder
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...
Avatar billede detox Nybegynder
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?
Avatar billede jps2mt Nybegynder
14. november 2003 - 12:55 #14
Bredde: 5
Højde: 8
Avatar billede detox Nybegynder
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.
Avatar billede detox Nybegynder
14. november 2003 - 13:17 #16
Du kan måske prøve at se på: imagettfbbox().
Avatar billede jps2mt Nybegynder
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 :(
Avatar billede detox Nybegynder
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å.
Avatar billede jps2mt Nybegynder
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...
Avatar billede detox Nybegynder
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);
Avatar billede detox Nybegynder
14. november 2003 - 13:41 #21
Ja, $x og $y bruger jeg ikke i dette tilfælde.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester