Render tekst en vormen op afbeeldingen in PHP

In het vorige artikel hebben we ons gericht op het laden en manipuleren van afbeeldingen met PHP. We hebben geleerd hoe je een afbeelding kunt roteren, van grootte veranderen, schalen of omdraaien. We hebben ook geleerd over verschillende filters en de convolutiematrix. Die tutorials bevatten ook enkele praktische toepassingen van de GD-bibliotheek, zoals het formaat van alle afbeeldingen in een map of watermerken toevoegen aan meerdere afbeeldingen tegelijk.

Naast het gebruik van GD voor het manipuleren van reguliere afbeeldingen, kunnen we ook onze eigen maken vanaf het begin. Verschillende functies in de bibliotheek kunnen worden gebruikt om basisvormen zoals ellipsen, cirkels, rechthoeken, veelhoeken en eenvoudige lijnen te tekenen. Met wat wiskunde kunnen deze vormen mooie patronen maken. Er zijn ook functies beschikbaar om tekst op de gerenderde afbeelding te tekenen, wat heel wat mogelijkheden opent.

In deze zelfstudie leer je hoe je basisvormen tekent in PHP en hoe je tekst rendert met je favoriete lettertype.

Teken basisvormen in PHP met GD

We zullen meer leren over basisvormen in dit gedeelte en later lijndikte, penselen en lijnstijlen bespreken.

Teken lijnen

Je kunt een eenvoudige rechte lijn trekken tussen twee gegeven punten met behulp van de imageline ($ afbeelding, $ x1, $ y1, $ x2, $ y2, $ kleur) functie. De image $ parameter is een afbeeldingsresource die eerder is gemaakt met behulp van functies zoals imagecreatetruecolor () of imagecreatefromjpeg (). We zullen gebruiken imagecreatetruecolor () gedurende deze zelfstudie om vanaf het begin nieuwe afbeeldingen te maken. De functie tekent een horizontale lijn als $ y1 is gelijk aan $ y2. Op dezelfde manier zal het een verticale lijn tekenen als $ x1 is gelijk aan $ x2.

Teken cirkels en bogen

De functie imagearc ($ afbeelding, $ cx, $ cy, $ breedte, $ hoogte, $ start, $ einde, $ kleur) kan cirkelvormige bogen tekenen met $ cx en $ cy als het centrum. De $ breedte en $ hoogte parameters bepalen de grootte van de boog op verschillende assen. De $ start en $ end parameters geven de begin- en eindhoek van de boog in graden aan. Als u volledige bogen van 0 tot 360 graden wilt tekenen, kunt u het alternatief gebruiken imageellipse ($ afbeelding, $ cx, $ cy, $ breedte, $ hoogte, $ kleur) functie.

Teken rechthoeken en polygonen

U kunt rechthoeken over een afbeelding tekenen met behulp van de imagerectangle ($ afbeelding, $ x1, $ y1, $ x2, $ y2, $ kleur) functie. De $ x1 en $ y1 waarden bepalen de linkerbovenhoek van de rechthoek. De $ x2 en $ y2 waarden bepalen de hoek rechtsonder. Er is ook een imagepolygon ($ afbeelding, $ punten, $ num_points, $ kleur) functie, die een veelhoek met een willekeurig aantal zijden of punten kan maken. De $ punten parameter is een array waarin twee elementen aan elkaar zijn gepaarde om de coördinaten van een specifiek punt te krijgen. 

Een andere functie genaamd imageopenpolygon () is toegevoegd aan PHP 7, die geen lijn trekt tussen het eerste en laatste punt.

Het samenbrengen om een ​​tekening te maken

In het volgende voorbeeld hebben we al deze functies gebruikt om een ​​lijntekening te maken met een hut, de zon en de grond.

Het belangrijkste hier is om de waarde van verschillende coördinaten te achterhalen. Ik wilde alles tekenen in verhouding tot de grootte van het originele beeld, dus ik gebruikte het $ img_height en $ img_width variabelen om de coördinaten van verschillende punten te berekenen.

Regelen van lijndikte-, stijl- en kleurvullingen

De bovenstaande afbeelding heeft een aantal problemen, zoals hele dunne lijnen en geen kleuren. Al deze problemen kunnen eenvoudig worden opgelost met behulp van functies zoals imagesetthickness () en imagefilledrectangle ().

Lijndikte

De beelddiepte ($ afbeelding, $ dikte) functie stelt de dikte in van de gerenderde lijnen bij het tekenen van rechthoeken, veelhoeken, bogen, enz. Bijvoorbeeld instelling $ dikte tot en met 5 maakt elke figuur getekend met imagerectangle (), imagearc (), imagepolygon (), etc. 5 pixels dik.

Gevulde vormen tekenen

Elke tekenfunctie heeft ook een gevulde kleurenversie die dat bepaalde figuur vult met een bepaalde kleur. Bijvoorbeeld, imagefilledrectangle () vult de getekende rechthoek met de opgegeven kleur.

Borstels gebruiken

Een zeer nuttige GD-functie is imagesetbrush ($ afbeelding, $ brush). De $ borstel parameter in deze functie is gewoon een andere afbeeldingsbron die kan worden gebruikt om lijnen te tekenen. U kunt bijvoorbeeld een transparante vectortekening van een bloem als een borstel gebruiken om mooie bloemenpatronen aan uw afbeelding toe te voegen. Het onderstaande codefragment is geschreven om de afbeelding van een wolk als een penseel te gebruiken bij het tekenen van een punt. Dit voegt een enkele wolk toe aan onze hemel.

Ik vond deze wolkenafbeelding op Pixabay en verkleinde deze tot een geschikte grootte voor ons project.

De volledige code voor de hutafbeelding wordt hieronder gegeven. We hebben eenvoudig twee versies van elk figuur toegevoegd, een om de omtrek te tekenen en de andere om de kleur in te vullen.

Dit is het eindresultaat van de bovenstaande PHP GD-code.

Tekst weergeven op afbeeldingen

PHP GD wordt geleverd met vier verschillende functies waarmee u meerdere tekens of slechts één teken in horizontale of verticale richting kunt renderen. Deze functies zijn imagechar (), imagecharup (), imagestring (), en imagestringup (). Ze accepteren allemaal dezelfde zes parameters, dus we zullen alleen de imagechar () functie hier.

De $ font parameter imagechar ($ afbeelding, $ font, $ x, $ y, $ string, $ color) functie is gewoon de grootte van de gerenderde tekst. Het accepteert alleen gehele getallen van 1 tot 5. Het $ string parameter is de tekst die u wilt renderen. Als u een tekenreeks met meerdere tekens doorgeeft aan de werkbalkfuncties, wordt alleen het eerste teken in de afbeelding gerenderd. De imagecharup () en imagestringup () functies zullen de tekst verticaal van onder naar boven weergeven.

Als het gaat om het renderen van tekst, zijn de vier functies die we hierboven bespraken zeer beperkt. U zult merken dat zelfs de grootste waarde voor de tekengrootte te klein is voor normaal gebruik. De tekst kan ook alleen horizontaal en verticaal worden geschreven.

Gelukkig heeft GD ook een imagettftext ($ afbeelding, $ grootte, $ hoek, $ x, $ y, $ kleur, $ fontfile, $ tekst) functie die de tekst in elk gewenst lettertype kan weergeven. De $ lettertypebestand parameter wordt gebruikt om het pad naar het TrueType-lettertype op te geven dat u wilt gebruiken om de tekst weer te geven. De $ x en $ y parameters bepalen de startpositie van de gerenderde tekst.

In het volgende voorbeeld worden al deze functies gebruikt om leuke teksteffecten te maken.

Zoals je kunt zien, hebben we dezelfde tekst met hetzelfde lettertype in iets verschillende posities weergegeven om enkele effecten te creëren, zoals basisschaduw. Het belangrijkste om in gedachten te houden is dat de tekst die wordt weergegeven door een willekeurige tekstfunctie de tekst eronder volledig zal verbergen in geval van overlapping. Dit is het uiteindelijke beeld verkregen na het uitvoeren van de bovenstaande code.

Laatste gedachten

Het doel van deze tutorial was om je vertrouwd te maken met verschillende GD-functies om basisvormen vanuit het niets te maken in PHP. Met behulp van een beetje wiskunde kun je deze functies gebruiken om meer gecompliceerde vormen te maken, zoals gewone veelhoeken, afgeronde rechthoeken, enz..

PHP GD heeft ook een aantal zeer nuttige functies voor het weergeven van tekst op een afbeelding. Het gebruik van een mooi lettertype zorgt ervoor dat de gerenderde tekst er niet raar uitziet wanneer deze op normale afbeeldingen wordt geplaatst die uit verschillende bestandspaden zijn geladen.

Heb je nog mooiere teksteffecten gemaakt in PHP? Deel ze alstublieft met ons in de comments.