Gi tekst og former på bilder i PHP

I den forrige artikkelen fokuserte vi på lastet og manipulert bilder med PHP. Vi lærte å rotere, endre størrelse, skala eller flip et bilde. Vi lærte også om forskjellige filtre og konvoluttmatrisen. Disse veiledningene dekket også noen praktiske bruksområder av GD-biblioteket som å endre størrelse på alle bilder i en katalog eller legge til vannmerker på flere bilder samtidig.

Foruten å bruke GD til å manipulere vanlige bilder, kan vi også lage vår egen fra grunnen av. Ulike funksjoner i biblioteket kan brukes til å tegne grunnleggende former som ellipser, sirkler, rektangler, polygoner og enkle linjer. Med noen matteformer kan disse figurene skape flotte mønstre. Det er også funksjoner tilgjengelig for å tegne tekst på det gjengitte bildet, noe som åpner opp mange muligheter.

Denne opplæringen vil lære deg hvordan du tegner grunnleggende former i PHP og hvordan du gjengir tekst ved hjelp av favorittfonten din.

Tegn grunnleggende former i PHP med GD

Vi vil lære om grunnleggende former i denne delen og deretter dekke linjetykkelse, pensler og linjestiler senere.

Tegn linjer

Du kan tegne en enkel rett linje mellom to poeng ved hjelp av imageline ($ image, $ x1, $ y1, $ x2, $ y2, $ farge) funksjon. De $ bilde parameter er en bilde ressurs som vil ha blitt opprettet tidligere ved hjelp av funksjoner som Image () eller imagecreatefromjpeg (). Vi skal bruke Image () gjennom hele denne opplæringen for å lage nye bilder fra bunnen av. Funksjonen vil tegne en horisontal linje hvis $ y1 er lik $ y2. På samme måte vil den tegne en vertikal linje hvis $ x1 er lik $ x2.

Tegn sirkler og buer

Funksjonen imagearc ($ image, $ cx, $ cy, $ bredde, $ høyde, $ start, $ ende, $ farge) kan tegne sirkulære buer med $ cx og $ cy som sentrum. De $ bredde og $ høyde Parametrene bestemmer størrelsen på lysbuen på forskjellige akser. De $ start og $ end parametere angir start- og sluttvinkelen til buen i grader. Hvis du vil tegne komplette buer fra 0 til 360 grader, kan du bruke alternativet imageellipse ($ image, $ cx, $ cy, $ bredde, $ høyde, $ farge) funksjon.

Tegn rektangler og polygoner

Du kan tegne rektangler over et bilde ved hjelp av imagerectangle ($ image, $ x1, $ y1, $ x2, $ y2, $ farge) funksjon. De $ x1 og $ y1 verdiene bestemmer det øverste venstre hjørnet av rektangelet. De $ x2 og $ y2 verdier bestemmer nederste høyre hjørne. Det er også en bildepolygon ($ image, $ poeng, $ num_points, $ color) funksjon, som kan lage en polygon med et hvilket som helst antall sider eller poeng. De $ punkter parameter er en matrise hvor to elementer er sammenkoblet for å få koordinatene til et bestemt punkt. 

En annen funksjon kalles imageopenpolygon () har blitt lagt til PHP 7, som ikke trekker en linje mellom første og siste punkt.

Setter det sammen for å lage en tegning

I det følgende eksemplet har vi brukt alle disse funksjonene til å lage en linjetegning med en hytte, sol og bakken.

Det viktigste her er bare å finne ut verdien av forskjellige koordinater. Jeg ønsket å tegne alt i forhold til størrelsen på det opprinnelige bildet, så jeg brukte $ img_height og $ img_width variabler for å beregne koordinatene til forskjellige punkter.

Styrer tykkelse, stil og fargefyll

Bildet ovenfor har et par problemer som svært tynne linjer og ingen fargestoffer. Alle disse problemene kan løses enkelt ved hjelp av funksjoner som imagesetthickness () og imagefilledrectangle ().

Linjetykkelse

De imagesetthickness ($ bilde, $ tykkelse) funksjonen setter tykkelsen på gjengitte linjer når du tegner rektangler, polygoner, buer, etc. For eksempel, innstilling $ tykkelse til 5 vil gjøre noen figur tegnet med imagerectangle (), imagearc (), imagepolygon (), etc. 5 piksler tykk.

Tegning fylte figurer

Hver tegnefunksjon har også en fylt fargeversjon som fyller den aktuelle figuren med en gitt farge. For eksempel, imagefilledrectangle () vil fylle det trukket rektangel med den oppgitte fargen.

Bruke børster

En veldig nyttig GD-funksjon er imagesetbrush ($ image, $ brush). De $ pensel parameter i denne funksjonen er bare en annen bilde ressurs som kan brukes til å tegne linjer. For eksempel kan du bruke en gjennomsiktig vektortegning av en blomst som en pensel for å legge til fine blomstermønstre på bildet ditt. Kodestykket nedenfor ble skrevet for å bruke bildet av en sky som en børste når du tegner et punkt. Dette legger til en eneste sky i himmelen.

Jeg fant dette skybildet på Pixabay og skalert det ned til en passende størrelse for prosjektet vårt.

Den komplette koden for hutbildet er gitt nedenfor. Vi har bare lagt til to versjoner av hver figur, en for å tegne omrisset og den andre for å fylle ut fargen.

Dette er det endelige resultatet av PHP GD-koden ovenfor.

Rendering av tekst på bilder

PHP GD leveres med fire forskjellige funksjoner for å la deg gjengi enten flere tegn eller bare ett tegn i horisontal eller vertikal retning. Disse funksjonene er imagechar (), imagecharup (), imagestring (), og imagestringup (). Alle aksepterer de samme seks parametrene, så vi skal bare diskutere imagechar () funksjon her.

De $ font parameter imagechar ($ image, $ font, $ x, $ y, $ string, $ color) funksjonen er rett og slett størrelsen på den gjengitte teksten. Den aksepterer bare heltallverdier fra 1 til 5. Den $ string parameter er teksten du vil gjengi. Hvis du sender en streng med flere tegn til char-funksjonene, blir bare det første tegnet gjengitt på bildet. De imagecharup () og imagestringup () funksjoner vil gjøre teksten vertikalt fra bunn til topp.

Når det kommer til gjengivelse av tekst, er de fire funksjonene vi diskuterte over, svært begrenset. Du vil oppdage at selv den største skriftstørrelsesverdien er for liten til normal bruk. Teksten kan også bare skrives horisontalt og vertikalt.

Heldigvis har GD også en imagettftext ($ image, $ size, $ vinkel, $ x, $ y, $ color, $ fontfile, $ text) funksjon som kan gjengi teksten i hvilken som helst skrift du vil ha. De $ fontfile parameter brukes til å spesifisere banen til TrueType-fonten du vil bruke til å vise teksten. De $ x og $ y parametere bestemmer startposisjonen for den gjengitte teksten.

Følgende eksempel bruker alle disse funksjonene til å lage noen fine teksteffekter.

Som du ser, har vi gjengitt samme tekst med samme skrift i litt forskjellige posisjoner for å skape noen effekter som grunnleggende tekstskygge. Det viktige å huske på er at teksten gjengitt av en hvilken som helst tekstfunksjon vil helt gjemme teksten under den i tilfelle overlapping. Her er det endelige bildet som er oppnådd etter å ha kjørt ovenstående kode.

Siste tanker

Målet med denne opplæringen var å få deg kjent med forskjellige GD-funksjoner for å tegne grunnleggende former fra grunnen i PHP. Med hjelp av en liten matte, vil du kunne bruke disse funksjonene til å skape mer kompliserte former som vanlige polygoner, avrundede rektangler osv..

PHP GD har også et par svært nyttige funksjoner for gjengivelse av tekst på et bilde. Bruken av en fin skrift vil sørge for at den gjengitte teksten ikke ser merkelig ut når den legges på vanlige bilder lastet fra forskjellige filbaner.

Har du laget flere fancy teksteffekter i PHP? Vennligst del dem med oss ​​i kommentarene.