Avatar billede saybot Nybegynder
15. juli 2005 - 16:28 Der er 22 kommentarer og
5 løsninger

Centrering af GD tekst?

jeg har et script der ligger noget tekst oven på et billede ved hjælp af GD.

Mit spørgsmål er så bare: Kan jeg på nogen måde få teksten til at altid at være center på billedet?
man kan ændre skrift størrelsen, så jeg går udfra der skal et eller andet fikst beregnings script til.

her er udsnit af kode:

if ($user && $type =="forum2") {   
header("Content-type: image/png");
$im = imagecreatefrompng("$type.png");
$user_width = imagettfbbox(9, 0, "$font", $user);
$x_value = (480 - ($user_width[2] + 105));
$color = imagecolorallocate($im, 165, 164, 164);
imagettftext($im, 9, 0, $x_value, 47, $color, "$font", $user);
imagepng($im, $filnavn);
imagepng($im);
imagedestroy($im);
exit;
}
Avatar billede myplacedk Nybegynder
15. juli 2005 - 18:58 #1
Du kan finde størrelsen på teksten med imagettfbbox(), derefter er det blot at beregne positionen.
Avatar billede saybot Nybegynder
15. juli 2005 - 19:06 #2
noget du evt. kan give mig et eksempel på med min kode? :)
Avatar billede myplacedk Nybegynder
15. juli 2005 - 21:38 #3
$ttfbbox = imagettfbbox (9, 0, $font, $user);
$ttfwidth = $ttfbox[4] - $ttfbox[6];
$ttfheight = $ttfbox[1] - $ttfbox[7];

Det må være noget i den stil, så har du størrelsen på teksten. (Det bliver mere kompliceret med andre vinkler end nul.)

Så er det bare at trække tekstens bredde fra billedets bredde, divere resten med 2, og så har du den vandrette placering. Så det samme lodret, og så skulle teksten være i midten.
Avatar billede saybot Nybegynder
15. juli 2005 - 23:15 #4
okay... jeg kan godt se ideen nu. meeen, jeg har sq lidt svært ved at få den presset ind i min kode hehe.
Avatar billede myplacedk Nybegynder
16. juli 2005 - 10:02 #5
Prøv... Smid noget kode, så kan vi se hvad der er galt.
Avatar billede saybot Nybegynder
16. juli 2005 - 13:37 #6
jeg sidder stadig og prøver... kan bare ikke få det til at virke... her er min kode som den er nu... den burde regne den vandrette placering ud her (tror jeg)

if ($user && $type =="forum1") {   
header("Content-type: image/png");
$im = imagecreatefrompng("$type.png");
$ttfbbox = imagettfbbox($fontsize, 0, 0, "$font", $user);
$ttfwidth = $ttfbox[4] - $ttfbox[6];
$ttfheight = $ttfbox[1] - $ttfbox[7];
$x_value = ($ttfbbox - 400) / 2;
$color = imagecolorallocate($im, 255, 255, 255);
imagettftext($im, $fontsize, 0, $x_value, 45, $color, "$font", $user);
imagepng($im, $forum_filnavn);
imagepng($im);
imagedestroy($im);
exit;
}
Avatar billede myplacedk Nybegynder
16. juli 2005 - 13:52 #7
Det ser umiddelbart rigtigt ud, hvordan er resultatet da?
Avatar billede myplacedk Nybegynder
16. juli 2005 - 13:53 #8
Hov:
$x_value = ($ttfbbox - 400) / 2;
Skal selvfølgelig være:
$x_value = ($ttfwidth - 400) / 2;
Avatar billede saybot Nybegynder
16. juli 2005 - 13:58 #9
har pillet lidt ved den nu... men nu er teksten slet ikke til at finde på mit billede :(

if ($user && $type =="forum1") {   
header("Content-type: image/png");
$im = imagecreatefrompng("$type.png");
$ttfbbox = imagettfbbox($fontsize, 0, 0, "$font", $user);
$ttfwidth = $ttfbox[4] - $ttfbox[6];
$ttfheight = $ttfbox[1] - $ttfbox[7];
$x_value = ($ttfwidth - 400) / 2;
$y_value = ($ttfheight - 70) / 2;
$color = imagecolorallocate($im, 255, 255, 255);
imagettftext($im, $fontsize, 0, $x_value, $y_value, $color, "$font", $user);
imagepng($im, $forum_filnavn);
imagepng($im);
imagedestroy($im);
Avatar billede myplacedk Nybegynder
16. juli 2005 - 14:28 #10
Prøv at udskrive $ttfwidth, $ttfheight, $x_value og $y_value. Hvad indeholder de?
Avatar billede saybot Nybegynder
17. juli 2005 - 11:26 #11
hvordan vil du have jeg skal udskrive dem?
Avatar billede myplacedk Nybegynder
17. juli 2005 - 21:08 #12
Med "echo" :)
For eksempel:
echo "<p>
ttfwidth = $ttfwidth<br />
ttfheight = $ttfheight<br />
x_value = $x_value<br />
y_value = $y_value<br />
</p>";
Avatar billede saybot Nybegynder
17. juli 2005 - 21:13 #13
det kan jeg da ikke.. den generere jo kun billedet
Avatar billede myplacedk Nybegynder
18. juli 2005 - 09:57 #14
Udkommenter disse linjer:
header("Content-type: image/png");
imagepng($im);
Avatar billede saybot Nybegynder
18. juli 2005 - 10:08 #15
underlige værdier... eller der er ikke nogen

ttfwidth = 0
ttfheight = 0
x_value = -200
y_value = -35

ttfwidth = 0
ttfheight = 0
x_value = -200
y_value = -35
Avatar billede myplacedk Nybegynder
18. juli 2005 - 10:28 #16
I formlen skal du lige skifte ($ttfwidth - 400) til (400 - $ttfwidth), og tilsvarende med højden, det er da noget af problemet. :)

Efter den echo, prøv at indsætte:
var_dump($ttfbbox);
Avatar billede saybot Nybegynder
18. juli 2005 - 10:49 #17
jeg får følgene:

Warning: Wrong parameter count for imagettfbbox() in signatures.php on line 166

ttfwidth = 0
ttfheight = 0
x_value = 200
y_value = 35
NULL
Avatar billede myplacedk Nybegynder
18. juli 2005 - 19:13 #18
Nu er vi så ved at komme der til, hvor du gerne må tænke dig om igen. ;-)
Den fejlmeddelelse betyder, at der ikke er det rigtige antal parametre på funktionen, dvs. vi bruger den forkert.
http://php.net/imagettfbox står der:
array imagettfbbox ( float size, float angle, string fontfile, string text )
Dvs. 4 parametre. Vi har:
imagettfbbox($fontsize, 0, 0, "$font", $user);
Fem parametre.
Første parameter skal være størrelsen, den er ok.
Andet parameter skal være vinklen, den er også OK.
Tredje parameter skal være filen med fonten, der står der nul. Ups, det nul skal så væk, for næste parametre er OK:
imagettfbbox($fontsize, 0, "$font", $user);
Avatar billede saybot Nybegynder
18. juli 2005 - 20:23 #19
okay... jeg har simpelthen bare været så frustreret over dette hehe...

men jeg får dette nu:

ttfwidth = 0
ttfheight = 0
x_value = 200
y_value = 35
array(8) { [0]=> int(-3) [1]=> int(8) [2]=> int(285) [3]=> int(8) [4]=> int(285) [5]=> int(-42) [6]=> int(-3) [7]=> int(-42) }

det ser ud til at height og width overhovedet ikke får noget input.
Avatar billede myplacedk Nybegynder
19. juli 2005 - 00:44 #20
Ah...
Hvis du sætter PHP til at vise notices ( fx. med error_reporting(E_ALL); i scriptet) vil den fortælle dig, at $ttfbox ikke eksisterer, den hedder $ttfbbox. :)
Avatar billede saybot Nybegynder
19. juli 2005 - 12:21 #21
jeg takker for din hjælp.

jeg kan ikke få den til at sidde rigtigt lodret... den placere sig næsten øverst. Den vandrette placering er helt fin.
Avatar billede saybot Nybegynder
19. juli 2005 - 12:22 #22
sådan ser det ud

if ($user && $type =="forum1") {   
header("Content-type: image/png");
$im = imagecreatefrompng("$type.png");
$ttfbbox = imagettfbbox($fontsize, 0, "$font", $user);
$ttfwidth = $ttfbbox[4] - $ttfbbox[6];
$ttfheight = $ttfbbox[1] - $ttfbbox[7];
$x_value = (400 - $ttfwidth) / 2;
$y_value = (70 - $ttfheight) / 2;
$color = imagecolorallocate($im, 255, 255, 255);
imagettftext($im, $fontsize, 0, $x_value, $y_value, $color, "$font", $user);
imagepng($im, $forum_filnavn);
imagepng($im);
imagedestroy($im);
exit;
}
Avatar billede myplacedk Nybegynder
20. juli 2005 - 16:01 #23
Kan jeg lokke dig til at sende det genererede billede til niels @ myplace.dk ?
Avatar billede myplacedk Nybegynder
20. juli 2005 - 23:13 #24
Ah ja, indholdet i $ttfbbox siger at øverste venstre hjørne er i (-3,-42), hvor vi forventer at det er i (0,0), i forhold til det koordinat vi beder om.
Vi kan justere beregningen sådan her:

$x_value = (400 - $ttfwidth) / 2 + $ttfbbox[6];
$y_value = (70 - $ttfheight) / 2 + $ttfbbox[7];

Hjælper det?
Avatar billede saybot Nybegynder
21. juli 2005 - 12:09 #25
nej... det er ingen tekst at se på mit billede når dette er tilføjet. Det er egentlig utrolig så svært det er hehe
Avatar billede myplacedk Nybegynder
21. juli 2005 - 12:23 #26
Prøv at trække dem fra, i stedet for at lægge dem til.
Avatar billede saybot Nybegynder
21. juli 2005 - 13:04 #27
det var da fantastisk :) mange tak hjælpen. Vi har været igennem en del, men det lykkedes.
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