Gd libary - Text centeren!

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior DevOps-ontwikkelaar eIDAS

Functie­omschrijving Burgers en bedrijven veilig en betrouwbaar digitaal toegang geven tot diensten en producten van het ministerie van Economische Zaken en Klimaat. Als senior DevOps-ontwikkelaar bouw je daar letterlijk aan mee. En dat doe je bij DICTU: een van de grootste en meest vooruitstrevende ICT-dienstverleners van de Rijksoverheid. Jij werkt mee aan de doorontwikkeling van eIDAS, dat staat voor Electronic IDentification Authentication and trust Services. Deze koppeling maakt de grensoverschrijdende authenticatie op overheidswebsites binnen de Europese Unie mogelijk. Het ministerie van Economische Zaken en Klimaat heeft één moderne toegangspoort voor zijn diensten en inspecties. Enkele daarvan zijn dankzij eIDAS inmiddels

Bekijk vacature »

Marnix Peters

Marnix Peters

30/07/2007 16:39:00
Quote Anchor link
Ik ben bezig met een habbo script, en zo komt hij er een beetje uit te zien:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
header("content-type: image/gif");
$image = ImageCreateFromgif("images/achter.GIF");
$grootte = 7;
$tekst = $_GET['habbo'];
$kleur = ImageColorAllocate($image, 255, 255, 255);
$font = 'fonts/Volter.ttf';
ImageTTFText($image, $grootte, 0, 23, 78, $kleur, $font, $tekst);
ImageGif($image);
ImageDestroy($image);
?>
  


Maar er staat nu tekst in, en bij elke naam dat hij weergeeft heeft het een andere lengte. Kan ik de text ook centeren? Heeft iemand een oplossing?
Gewijzigd op 01/01/1970 01:00:00 door Marnix Peters
 
PHP hulp

PHP hulp

28/10/2020 18:34:00
 
Robert Deiman

Robert Deiman

30/07/2007 16:45:00
Quote Anchor link
Mijo ontgaat voledig warom je een ImageCreate From gif doet, ook als content-type een image/gif opgeeft en dan een ImagePng commando uitvoert.
 
Marnix Peters

Marnix Peters

30/07/2007 17:00:00
Quote Anchor link
Oeps.. zo, nu is het beter!
Maar kan je verder helpen?
 
Marnix Peters

Marnix Peters

31/07/2007 17:03:00
Quote Anchor link
Ik heb het script wat veranderd, mischien nu wat beter, maar ik heb nog steeds het zelfde probleem!
 
Marnix Peters

Marnix Peters

01/08/2007 17:33:00
Quote Anchor link
Probleem opgelost, nu heb ik nieuw probleem, lees verder! :)
 
Bo az

Bo az

01/08/2007 17:36:00
Quote Anchor link
Om tekst te centreren, kan je de omvang van de tekst berekenen met: imagettfbbox() vervolgens kan je dmv berekeningen centreren.

Kijk ook eens naar de methode addText in dit script van mij.
 
Marnix Peters

Marnix Peters

01/08/2007 17:39:00
Quote Anchor link
Bedankt, maar ik snap het niet helemaal.
Zou je het een klein beetje proberen toe te voegen in het script?
 
Bo az

Bo az

01/08/2007 17:46:00
Quote Anchor link
Iets duidelijker graag, wat snap je niet, denk dat ik het niet duidelijker kan maken dan mijn script...
 
Marnix Peters

Marnix Peters

01/08/2007 17:51:00
Quote Anchor link
Ik snap niet hoe ik dat invoeg in mijn script.
Ik heb het bekeken, maar hoe center je het?

Kan jij het anders proberen in te voegen?
 
Bo az

Bo az

01/08/2007 20:40:00
Quote Anchor link
Ik heb niet veel zin om het te gaan voorkauwen, een klein beetje eigen initiatief stel ik wel op prijs.

Wat je moet doen is het volgende:
- de functie imagettfbbox() geeft de breedte + hoogte van de tekst.
- de functies imagesx() & imagesy() geven de breedte en hoogte van het plaatjes waar te tekst op moet komen.

- nu kan je met een rekensom het midden van het plaatje bepalen.
- door de helft van de breedte van de tekst te nemen en die van het midden van het plaatje af te halen, weet je hoeveel pixels van links je tekst moet verschijnen.
- doe het zelfde voor de hoogte.

- vervolgens gebruik je de zojuist uitgerekende coördinaten om met de standaard functie imagettftext() de tekst daadwerkelijk op het plaatje te zetten.

et voila!

Het lastige zit 'm dus in de reken som en niet in de php.

Edit:
Overigens kan je ook gewoon mijn class gebruiken, dan hoef je het helemaal niet meer te maken, zit zelfs al een voorbeeld bij. Overigens moet je dan wel PHP 5 hebben.
(En het zou een goede oefening zijn om het zelf te doen, als je tenminste php wil leren.)
Gewijzigd op 01/01/1970 01:00:00 door Bo az
 
Arjan Kapteijn

Arjan Kapteijn

01/08/2007 20:45:00
Quote Anchor link
marnix schreef op 01.08.2007 17:39:
Bedankt, maar ik snap het niet helemaal.
Zou je het een klein beetje proberen toe te voegen in het script?


Binnen 3 minuten, kom op..
 
Gerard M

Gerard M

01/08/2007 20:51:00
Quote Anchor link
start punt text = (afbeelding_breedte/2)-(aantal_letters*letter_breedte)/2

In een notendopje.
 
Bo az

Bo az

01/08/2007 21:03:00
Quote Anchor link
@Gerjo, dat zou betekenen dat je alleen monospace lettertypes kan gebruiken. Bij bijvoorbeeld Arial is namelijk de w breder dan de v en gaat je reken som dus al niet op.
 
Gerard M

Gerard M

01/08/2007 21:24:00
Quote Anchor link
@Boaz, ja dat klopt helemaal. Je zou dan een stukje dummy tekst kunnen tekenen met imageftbbox, en aan de hand van de geretourneerde waardes van imageftbbox de tekst breedte kunnen berekenen.
Gewijzigd op 01/01/1970 01:00:00 door Gerard M
 
Marnix Peters

Marnix Peters

02/08/2007 19:32:00
Quote Anchor link
Boaz schreef op 01.08.2007 20:40:
Ik heb niet veel zin om het te gaan voorkauwen, een klein beetje eigen initiatief stel ik wel op prijs.

Wat je moet doen is het volgende:
- de functie imagettfbbox() geeft de breedte + hoogte van de tekst.
- de functies imagesx() & imagesy() geven de breedte en hoogte van het plaatjes waar te tekst op moet komen.

- nu kan je met een rekensom het midden van het plaatje bepalen.
- door de helft van de breedte van de tekst te nemen en die van het midden van het plaatje af te halen, weet je hoeveel pixels van links je tekst moet verschijnen.
- doe het zelfde voor de hoogte.

- vervolgens gebruik je de zojuist uitgerekende coördinaten om met de standaard functie imagettftext() de tekst daadwerkelijk op het plaatje te zetten.

et voila!

Het lastige zit 'm dus in de reken som en niet in de php.

Edit:
Overigens kan je ook gewoon mijn class gebruiken, dan hoef je het helemaal niet meer te maken, zit zelfs al een voorbeeld bij. Overigens moet je dan wel PHP 5 hebben.
(En het zou een goede oefening zijn om het zelf te doen, als je tenminste php wil leren.)


Het lukt me wel om de text in het midden te krijgen.
Maar je moet bij het script je naam invullen en die hebben allemaal verschillende tekens, de ene naam is langer dan de andere.
Dus dan krijg je het niet steeds in het midden.

De class hoef ik niet, want anders moet ik het hele script opnieuw bouwen, sorry! :P
Arjan Kapteijn schreef op 01.08.2007 20:45:
marnix schreef op 01.08.2007 17:39:
Bedankt, maar ik snap het niet helemaal.
Zou je het een klein beetje proberen toe te voegen in het script?


Binnen 3 minuten, kom op..


Als ik het snap kan ik het toch ook niet uitvoeren?
Ik doe me best!
Gewijzigd op 01/01/1970 01:00:00 door Marnix Peters
 
Bo az

Bo az

02/08/2007 19:53:00
Quote Anchor link
Gerjo schreef op 01.08.2007 21:24:
@Boaz, ja dat klopt helemaal. Je zou dan een stukje dummy tekst kunnen tekenen met imageftbbox, en aan de hand van de geretourneerde waardes van imageftbbox de tekst breedte kunnen berekenen.


Dit is nu precies wat ik de hele tijd probeer uit te leggen aan de TS, alleen dan niet met dummy tekst, maar gewoon met de echte tekst.

marnix:
Het lukt me wel om de text in het midden te krijgen.
Maar je moet bij het script je naam invullen en die hebben allemaal verschillende tekens, de ene naam is langer dan de andere.
Dus dan krijg je het niet steeds in het midden.


Daarvoor heb je nu precies de manual, heb je nu al eens de functie beschrijving van imagettfbbox() doorgelezen? Daar lijkt het namelijk niet erg op, anders hand je dit probleem al wel opgelost vermoedt ik.
 
Marnix Peters

Marnix Peters

02/08/2007 20:07:00
Quote Anchor link
Laat ook maar, ik geef het op.
Ik begin er steeds minder van te snappen!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.