Lage en graf ved hjelp av GD-biblioteket. Tegne grafer i PHP Hva vi endret

For å identifisere bruken av grafiske verktøy i nettscenarier, vurder følgende rekke mulige tilfeller av grafikkbruk:

  • Statiske bilder, laget uavhengig eller lånt fra et sted, kan bygges inn i en HTML-side.
  • Programmatisk genererte bilder (HTML + CSS) kan brukes.
  • Du kan bruke gd-biblioteket til å forhåndsskape statisk grafikk for alle mulige situasjoner som kan oppstå under utførelse av et skript, lagre dem i filer og vise dem betinget.

Vi vil ikke vurdere muligheten for å introdusere grafikk ved hjelp av statiske bilder på grunn av dens enkelhet, så først vil vi vurdere et enkelt alternativ (HTML + CSS-grafikk), og deretter vil vi vurdere å bruke gd-biblioteket i PHP.

Grafikk HTML + CSS

Besøkende på nettstedet er kjent med horisontale søylediagrammer med fargede sider, som spesielt ofte brukes til å illustrere undersøkelsesresultater. Ved første øyekast ser det ut til at en slags grafiske verktøy brukes til å lage slike diagrammer, men i virkeligheten er det nok å bruke noen få enkle skript:

Arbeide med grafikk i PHP, HTML, CSS /* CSS-stiler som danner designet */ body div ( høyde: 1em; display: inline-block; vertical-align: middle ) span ( display: inline-block; width: 120px ) .oransje ( bakgrunn: oransje ) .eple ( bakgrunn: #33CC66 ) .banan ( bakgrunn: gul ) .tomat ( bakgrunn: rød ) .agurk ( bakgrunn: grønn ) .potet ( bakgrunn: grå ) Bestillingsskjema Frukt Appelsiner Epler Bananer Grønnsaker Tomater Agurker Poteter

Dette eksemplet viser ingen nye funksjoner i PHP, men viser ganske enkelt en enkel måte å lage grafikk ved hjelp av HTML og CSS (i dette tilfellet stolpediagram):

gd bibliotek

Grafikkverktøyene beskrevet i forrige seksjon uttømmer praktisk talt mulighetene til standard HTML-kode (selv om det er verdt å merke seg at vi ikke dekket det ganske kraftige HTML5 Canvas-grafikkverktøyet). La oss nå gå videre til å beskrive metoder for å lage virkelig vilkårlig grafikk ved å bruke gd-biblioteket.

Generell beskrivelse av gd-biblioteket

Generelt sett er gd-verktøysettet et bibliotek med C-kode for å lage og manipulere bilder. Dette biblioteket ble opprinnelig utviklet og gjort tilgjengelig for publikum av de talentfulle og sjenerøse ansatte på Boutell.com.

Selve gd-biblioteket er ikke et grafikk- eller tegneprogram, og utgjør heller ikke et frittstående program eller grafisk brukergrensesnitt. I stedet gir gd-biblioteket funksjoner som kan kalles av et hvilket som helst program for å utføre ønsket bildemanipulering. Dette betyr at gd-biblioteket kan kobles til et hvilket som helst C-program der det er nødvendig å bruke koden til dette biblioteket. Dette er akkurat problemet som utviklerne av PHP-systemet løste.

Faktisk har et sett med grensesnittfunksjoner blitt skrevet for dette formålet som gjør det enkelt å kalle gd-prosedyrer fra et PHP-skript. Men selve gd-biblioteket inneholder ingen PHP-spesifikk kode, og grensesnitt er utviklet for å tillate tilgang til biblioteket fra flere andre programmeringsspråk og programmeringsmiljøer, inkludert Perl, Pascal, Haskell og REXX.

Gd-biblioteket lar deg kalle funksjoner for å lage kildebilder (opprinnelig tomme, som ligner et blankt ark), tegne og male i disse kildebildene på en rekke måter, og til slutt konvertere bildet fra gds interne bildeformat til et standard bildeformat og deretter sende det til endelig destinasjon (utdata i et nettleservindu eller lagre i en fil eller database). Og siden alle disse operasjonene utføres under kontroll av programmet, og ikke utføres manuelt, kan de opprettede bildene bli så komplekse som ønsket og avhenge av eventuelle situasjoner under kjøringen av programmet som det er ønskelig å gjøre dem avhengige av.

Bildeformater

gd-biblioteket lar deg i utgangspunktet importere og eksportere bilder ved hjelp av en rekke formater. De mest populære bildeformatene er GIF, JPEG og PNG, selv om eksemplene som brukes primært bruker sistnevnte.

GIF- og PNG-formatene er ment å beskrive et rutenett av fargede elementer som tilsvarer piksler, med noen tillegg. Det første tillegget er at celler kan inneholde faktiske fargetall eller indekser i en tabell med fargetall. (Det første alternativet lar deg lage mer uttrykksfulle bilder, siden det lar deg gi et hvilket som helst antall forskjellige farger, og det siste alternativet hjelper deg med å lage mer kompakte bilder.)

Det andre tillegget er som følger. Selvfølgelig er den konseptuelle representasjonen av GIF- og PNG-formatene ganske enkel, men i praksis blir lesing, skriving og overføring av bilder i disse formatene alltid gjort i komprimert form. Komprimering er nødvendig fordi lagring av data representert som et rutenett av celler krever en stor mengde minne. Et enkelt bilde på 500x400 piksler inneholder 200 000 piksler, og hvis hver piksel krever tre byte, er mengden minne som kreves allerede over en halv megabyte.

Emnet komprimering er bredt og komplekst, men de fleste komprimeringsalgoritmer er basert på å redusere bilderedundans for å redusere størrelsen. (For eksempel vil det ta mindre minneplass for å spesifisere at hver piksel i et bilde er grønn enn å spesifisere den grønne verdien for hver piksel individuelt.) Dessverre er ikke komprimeringsalgoritmer avhengige av å bruke disse egenskapene fordi de må bestemme slike egenskaper. komplekse problemer at metodene for å løse disse problemene, implementert i komprimeringsalgoritmen som brukes til å generere bilder i GIF-formatet, til og med er patentert.

Installerer biblioteket

Ærlig talt er oppgaven med å installere gd-biblioteket og få det til å fungere vellykket sammen med et PHP-system ganske kompleks. Dette skyldes ikke noen mangler i PHP- eller gd-programvaren, men er helt på grunn av konfigurasjonsproblemer; spesielt må du forstå hvor gd-bibliotekene skal være og faktisk er, og sørge for at kompilerings- og koblingstrinnene til alle kjørbare filer er korrekt fullført. Derfor er den best mulige situasjonen at brukeren oppdager at gd-biblioteket allerede er installert og gd-støtte allerede er aktivert i PHP-systemet (enten med tillatelse fra webverten eller fordi det er inkludert i installert PHP-system).

Derfor må installasjonen av gd-biblioteket begynne fra trinn null - ved å sjekke om dette biblioteket allerede er installert. Skriv først inn følgende kode i skriptfilen din og se resultatene av å kjøre den i nettleseren din, enten skriptene dine kjøres av webverten eller kjøres helt av din egen installasjon:

Etter å ha vist denne siden på skjermen, søk ganske enkelt etter tekststrengen "gd" i nettleservinduet. Dette bør avsløre et underavsnitt som beskriver i hvilken grad PHP-installasjonen din tillater støtte for gd-biblioteket. Hvis du kun har tenkt å forberede visse typer bilder (for eksempel PNG), og resultatene av phpinfo()-funksjonen indikerer at støtte for den typen bilder er aktivert, kan du komme i gang med en gang. Og hvis gd-versjonsinformasjonen inkluderer ordet "bundled", så brukes gd-biblioteket som følger med PHP.

Hvis et forsøk på å finne en omtale av gd-biblioteket ender med feil, og du installerer PHP selv, kan du installere og konfigurere gd-bibliotekets konfigurasjon. (På den annen side, hvis PHP-installasjonen din håndteres av vertsselskapet ditt, er dine eneste alternativer å be det selskapet om å gi støtte for gd-biblioteket, eller bruke et annet webvertsfirma.)

Å bruke gd-biblioteket som følger med PHP eliminerer mange av problemene forbundet med å installere gd, men ikke alle. Faktum er at bruk av selve versjonen inkludert i distribusjonssettet lar deg få gd-biblioteket, men ikke nødvendigvis alle bibliotekene som er nødvendige for at gd skal fungere. Selve gd-biblioteket avhenger av flere andre biblioteker: libpng (for å manipulere PNG-bilder), zlib (for komprimering) og jpeg-6b eller nyere (for å manipulere JPEG-bilder om nødvendig). Disse bibliotekene er allerede til stede i mange Linux-installasjoner, i så fall kan det være tilstrekkelig å inkludere det nødvendige alternativet med (som --with-zlib) i alternativene uten å spesifisere installasjonskatalogen. Hvis du gjør PHP-konfigurasjonen selv, kan du ganske enkelt legge til --with-gd-alternativet for å sikre at den inkluderte versjonen av gd er inkludert i den kjørbare filen. Og hvis du vil peke på en annen versjon, bruk --with-gd=path-alternativet i stedet.

Hvis du finner ut at ett eller flere nødvendige biblioteker mangler, betyr dette at disse bibliotekene må bygges separat. For informasjon om hvor du finner gjeldende versjoner, kan du starte med å lese dokumentasjonen på www.libgd.org.

Grunnleggende prinsipper for å jobbe med gd-biblioteket

Når et bilde lages eller manipuleres ved hjelp av gd-verktøysettet, er bildet representert i et spesielt gd-format som ikke samsvarer med noen konvensjonell bildetype. Det er teoretisk mulig å eksportere bilder i dette gd-formatet, men en slik operasjon brukes sjelden fordi det resulterende bildet ikke er komprimert og ikke kan vises i en nettleser eller et enkelt grafikkprogram.

Et bilde behandlet ved hjelp av gd-verktøysettet er preget av informasjon om bredden, høyden og fargen på alle piksler, hvor antallet er lik produktet av bredde og høyde. Vanligvis begynner et program sin interaksjon med gd-biblioteket ved enten å lage et nytt tomt bilde (som det skal tegnes og tegnes på), eller ved å importere et bilde fra en fil. Følgende trinn utføres vanligvis: først, distribusjon av farger i bildet, for det andre, tegning og maling eller manipulering av bildet ved hjelp av noen andre operasjoner, for det tredje, konvertering av bildet til et generelt akseptert format (for eksempel PNG eller JPEG) og overføre den til bestemmelsesstedet.

Representasjon av farger

Det er to måter å representere farger på i gd-bilder: en palettbasert representasjon, som er begrenset til 256 farger, og en ekte fargerepresentasjon, som lar deg spesifisere et vilkårlig antall forskjellige RBG-fargetall. I gd 1.x var det eneste alternativet å bruke palettbaserte farger, men i gd 2.x og versjonen av dette biblioteket som følger med PHP, er det mulig å lage både palettbaserte bilder og bilder i realistiske farger. En ting å huske på er at et gitt gd-bilde enten må være palettbasert eller ha naturtro farger (RGB); dette betyr at det ikke er noe alternativ for å introdusere realistiske farger i bilder basert på en palett.

For å få det originale tomme bildet basert på paletten, må du kalle opp ImageCreate()-funksjonen, og for å få bildet i ekte farger, bruk ImageCreateTrueColor()-funksjonen.

Palettbaserte bilder

Farger spesifiseres i rød-grønn-blå (RGB)-format, med tre tall fra 0 til 255. For eksempel er fargen spesifisert av tallene (255, 0, 0) knallrød, fargen ( 0, 255, 0) - grønn, farge (0, 0, 255) - blå, farge (0, 0, 0) - svart, farge (255, 255, 255) - hvit og farge (127, 127, 127) - grå. Ved å lage flere og flere nye farger, kan du velge verdiene til de tre fargekomponentene vilkårlig.

Eventuell tegning på et bilde skal gjøres med en bestemt farge, og fargene skal fordeles i bildet før de tas i bruk. I tillegg blir den første fargen som distribueres i bildet automatisk bakgrunnsfargen. Så, ikke i noe tilfelle bør du anta at du kan klare deg uten å spesifisere farger, og vanligvis er operasjonen med å distribuere farger den første operasjonen etter å ha opprettet et nytt tomt bilde.

Farger i palettbaserte bilder lages ved å bruke imagecolorallocate()-funksjonen, som tar som parametere et bilde (opprettet tidligere) og tre heltall som spesifiserer andelen rødt, grønt og blått. Returverdien er et heltall som spesifiserer indeksen til den nye fargen i bildets interne palett. Denne returverdien må tilordnes en variabel fordi den angitte indeksverdien er nødvendig for å utføre alle fremtidige operasjoner med denne fargen.

Palettbaserte bilder kan ha et maksimalt antall farger på 256. (Leseren kan være interessert i hva slike bilder faktisk er basert på, men hver piksel i et palettbasert bilde er faktisk en enkelt byte som lagrer indeksen av ett element i paletten med 256 farger.)

Merk at indeksen som returneres når du distribuerer en av fargene i et bilde, bare er meningsfull for det bildet. For eksempel, hvis et PHP-skript tildeler $black til en farge distribuert i ett bilde, gir det ingen mening å bruke den variabelen som fargeinndata til en tegnekommando som kalles for å behandle et annet bilde.

Bilder med realistiske farger

gd 2.0 og nyere gir også muligheten til å lage ikke-palettbaserte bilder der hver piksel lagrer et vilkårlig RGB-fargenummer. I dette såkalte true-color-formatet er antallet mulige farger ekstremt stort. Ikke bare utvider denne funksjonen grenseløst omfanget av kunstneriske uttrykk, men den lar deg også trofast reprodusere PNG- og JPEG-bilder med naturtro farger lastet inn i minnet ved hjelp av gd-verktøysettet.

Bortsett fra at en annen funksjon brukes til å lage det første bildet og det ikke er noen begrensninger for valg av forskjellige farger, er prinsippene for å jobbe med ekte farger lik prinsippene for palettbaserte bilder.

Spesielt kan du fortsatt kalle ImageColorAllocate() for å lage nye farger og tilordne en variabel returverdien for senere bruk i tegnekommandoer. Den eneste forskjellen er at returverdien er RGB-fargenummeret, ikke indeksen til elementet i paletten. I tillegg, i bilder med naturtro farger, er det ikke noe konsept for en bakgrunnsfarge opprettet som en bieffekt av ImageColorAllocate()-funksjonen; Som et resultat av initialisering blir alle piksler tildelt betegnelsen svart (0, 0, 0).

Åpenhet

Versjoner av gd 2.x støtter begrepet åpenhet. Dette bruker en alfakanal (i tillegg til de røde, grønne og blå verdiene) for å indikere hvor gjennomsiktig fargen er. Dette tillater for eksempel en form å legges over en annen slik at den første formen forblir delvis synlig i stedet for å overlappe den andre fullstendig.

I PHP har mange funksjoner for å jobbe med bilder en analog som inneholder ordet "alfa" i navnet, noe som indikerer at i disse funksjonene er farge representert med fire verdier (R, G, B, A). For eksempel tar imageColorAllocate()-funksjonen tre parametere, og når du kaller opp ImageColorAllocateAlpha()-funksjonen, må du spesifisere en fjerde parameter med en verdi mellom 0 og 127. En verdi på null indikerer at fargen er helt ugjennomsiktig, og en verdi av 127 indikerer at fargen er helt ugjennomsiktig

Koordinater og tegnekommandoer

Etter å ha laget et bilde ved hjelp av gd-verktøysettet, opprettes implisitt et koordinatsystem som lar deg spesifisere tegnekommandoer i det. De begrensende koordinatverdiene i dette systemet bestemmes av de spesifiserte parametrene for bildets bredde og høyde.

Opprinnelsen til koordinatene i dette systemet, tilsvarende koordinatene (0, 0), er plassert i øvre venstre hjørne av bildet. Den positive retningen for X-verdier er fra venstre til høyre, og for Y-verdier er den fra topp til bunn. (I datagrafikkkoordinatsystemer er denne plasseringen av opprinnelsen vanlig, men de som har studert analytisk geometri ser ut til å være vant til at opprinnelsen er i nedre venstre hjørne av diagrammet.)

Antallet tegnekommandoer er veldig stort. Disse kommandoene inkluderer, men er ikke begrenset til, kommandoer for å tegne linjesegmenter, rektangler og buer, samt kommandoer for å angi spesifikke pikselverdier. Men husk at sluttresultatet av alle disse tegne- og plottekommandoene er å angi pikselverdier. Etter å ha utført kommandoer som endrer pikselverdier, er det ingen spor igjen i minnet (annet enn de endrede verdiene selv), så det er ingen måte å overstyre tegne- og plottekommandoer eller å presentere resultatene av forskjellige kommandoer separat.

Det er ingenting i veien for tegnekommandoer som strekker seg utover det angitte bildet, men slik tegning har ingen synlig effekt. For eksempel vil et rektangel ikke være synlig i bildet hvis alle koordinatverdier er negative.

Formatkonvertering

Alle tegnings- og bildemanipuleringsoperasjoner utføres på bildet representert i det interne gd-formatet. Og etter at disse operasjonene er fullført, kan skriptet kalle en av konverterings- og utdatakommandoene (imagepng, imagetjpeg, etc.) for å konvertere dette bildet til det nødvendige grafiske formatet og sende det til brukerens nettleservindu (eller til en fil).

Frigjør ressurser

Når resultatet av konverteringen av det fullførte gd-bildet er overført til brukeren, kan vi vurdere at arbeidet med den interne versjonen er fullført. Dette betyr at denne versjonen må destrueres. Den riktige måten å gjøre dette på er å kalle imagedestroy() med et bilde som parameter.

gd-bibliotekets funksjoner

Vi skal ikke separat liste og beskrive i denne artikkelen alle funksjonene som tilbys i gd-grensesnittet til PHP-tolken. For å gjøre deg kjent med denne informasjonen, anbefaler vi å bruke delen "Bildebehandling og generering" i php.net-manualen. De fleste gd-funksjoner faller inn i en av kategoriene vist i tabellen nedenfor. Merk at funksjonsnavnene som er oppført i denne tabellen er store for å gjøre den første bokstaven i hvert ord lettere å lese, men denne betingelsen blir ikke alltid observert i kodeeksemplene fordi PHP-funksjonsnavn ikke skiller mellom store og små bokstaver:

Klassifisering av gd-funksjoner Type eksempel merknad
Funksjoner for å lage bilder ImageCreate(), ImageCreateTruecolor(), ImageCreateFromGd(), ImageCreateFromJpeg() Returner et nytt gd-bilde. ImageCreate()-funksjonen tar som parametre bredden og høyden til bildet, og parameterne til andre funksjoner er en filbane, URL eller en streng som inneholder et tidligere opprettet bilde som skal lastes og konverteres til gd-format
Funksjoner som utfører fargedistribusjonsoperasjoner ImageColorAllocate(), ImageColorAllocateAlpha(), ImageColorDeallocate() ImageColorAllocate()-funksjonen tar et bildehåndtak og de nødvendige røde, grønne og blå verdiene som parametere, og returnerer deretter et fargenummer for senere bruk i tegne- og plotteoperasjoner. ImageColorAllocateAlpha-funksjonen godtar en tilleggsparameter - gjennomsiktighetskoeffisient (0-127)
Funksjoner som utfører fargetilpasningsoperasjoner ImageColorClosest(), ImageColorClosestAlpha(), ImageColorExact(), ImageColorExactAlpha() Returner indeksen til den matchende fargen i palettbildet. Funksjoner som inneholder ordet "Nærmest" i navnet returnerer den fargen som passer best (samsvarende nøyaktighet måles som avstanden mellom punktene i RGB-verdirommet); funksjoner med betegnelsen "Eksakt" returnerer fargenummeret bare hvis det er identisk med det søkte, ellers returnerer de verdien -1, funksjoner med navnet "Alpha" opererer på farger, som bestemmes ved hjelp av fire verdier (med gjennomsiktige farger)
Linjetegningsfunksjoner ImageLine(), ImageDashedLine(), ImageRectangle(), ImagePolygon(), ImageEllipse(), ImageArc() De brukes til å tegne rette segmenter eller kurver av den angitte formen. Vanligvis er den første parameteren for hver av disse funksjonene bildet, den siste parameteren er fargen, og de mellomliggende parameterne er X- og Y-koordinatene.
Innstillinger for linjetegningspenn ImageSetStyle(), ImageSetThickness() Endre innstillinger som påvirker egenskapene til linjene som produseres av påfølgende linjetegningskommandoer (noen av disse funksjonene gjelder kun for gd 2.0.1 eller nyere versjoner)
Tegne- og fyllingsfunksjoner ImageFilledRectangle(), ImageFilledEllipse(), ImageFilledPolygon(), ImageFilledArc(), ImageFill() Som regel ligner de de tilsvarende funksjonene for å tegne linjer, men de gir ikke bare for å tegne konturene til områder, men også for å fylle de opprettede områdene med farge. Spesialfunksjonen ImageFill() utfører en fyllingsoperasjon ved å bruke en spesifisert fyllfarge. Fylling gjøres i alle retninger fra de angitte XY-koordinatene (noen av disse funksjonene krever gd 2.0.1 eller nyere)
Funksjoner for arbeid med tekst ImageString(), ImageLoadFont() ImageString-funksjonen tar som parametere et bildehåndtak, skriftnummer, X- og Y-koordinater, en tekststreng og en farge. Hvis skriftnummeret er mellom 1 og 5, brukes en av de fem innebygde skriftene til å vise linjen i denne fargen. På den annen side indikerer et skrifttall større enn 5 resultatet av å laste en spesialisert skrift ved hjelp av funksjonen ImageLoadFont()
Eksporter funksjoner ImagePng(), ImageJpeg() Konverter det interne gd-bildet til et bilde med riktig format, og send deretter dette bildet til utdatastrømmen. Hvis bare én parameter er spesifisert (bildehåndtaket), blir bildet ekko til brukeren, og hvis en ekstra parameter brukes, som er en filbane, blir destinasjonen til utdatastrømmen filen
Bildeødeleggelsesfunksjon ImageDestroy() Tar et bildehåndtak som en parameter og frigjør alle ressurser knyttet til bildet
Støtte for HTTP-bilder

For at et bilde skal presenteres riktig i brukerens nettleser, er det nødvendig å spesifisere hvor bildet skal komme fra og hvilket format det har. Derfor er det dessverre ikke mulig å bare implementere for eksempel et kall til imageToPng()-funksjonen i den genererte HTML-filen og dermed løse problemet med å vise bildet. I hovedsak må du alternere bildeutdatakoden med HTML-koden generert i PHP-skriptet, og for dette kan du bruke ett av de tre alternativene beskrevet nedenfor.

Opprette helsidebilder

Hele den genererte siden kan formateres som et bilde. I dette tilfellet må du sende en HTTP-header foran bildedataene, og dermed erklære at det som følger er et bilde av en bestemt type. Følgende linjer kan for eksempel være gitt på slutten av skriptet:

// ... kode som lager et bilde og tilordner det // til variabelen $image header("Content-type: image/png"); // Vis tittelen i nettleseren imagepng($image); // Send dataene til selve bildet, konvertert til PNG-format imagedestroy($image); // Frigjør ressurser

Fordelen med denne tilnærmingen er at all informasjon, inkludert POST-parametere, kan brukes til å formidle instruksjoner om sammensetningen av det fremtidige bildet. Ulempen er at den resulterende siden ikke kan inneholde noen vanlig HTML-kode. Faktisk må du til og med være forsiktig med å sende noen tekstutdata før tittelen og bildet i skriptene dine, da dette er ensbetydende med å sende innholdet for tidlig. I dette tilfellet vises feilmeldingen "Overskrifter allerede sendt...".

Innbygging av bilder lagret i filer

Først av alt, merk at HTML støtter beskrivelsen , som lar deg bygge inn et bilde ved å spesifisere bildefilbanen eller URL-adressen, som i følgende eksempel:

Denne utformingen gjelder for statiske bildefiler, men det er ingen grunn til at den ikke kunne aktivere innbygging av et nyopprettet bilde. Derfor kan du forberede et skript der et bilde først opprettes, deretter skrives bildedataene til en lokal fil, og deretter genereres HTML-koden med den tilsvarende beskrivelsen , og peker på den nyopprettede filen.

De eneste ulempene med denne tilnærmingen er at for det første må sideopprettingsprosessen inkludere filskriving, noe som kan være tidkrevende, og for det andre må du bestemme hva du skal gjøre med filene når du er ferdig med å bruke dem.

Men i en viss situasjon er denne tilnærmingen ideell. Det handler om å lage og bufre bilder som representerer et begrenset sett med valg. I dette tilfellet er det en spesifikk måte å knytte en bestemt situasjon til navnet på bildefilen. Når noen av disse situasjonene oppstår som krever at et bilde sendes ut, sjekkes det for å se om en tilsvarende fil allerede eksisterer. Hvis svaret er positivt, brukes en lenke til denne filen, formatert som en beskrivelse , og hvis svaret er nei, blir et bilde opprettet, skrevet til en fil, og deretter blir en lenke til dette bildet påført igjen. Til syvende og sist vil det rett og slett ikke være nødvendig å lage nye filer.

Innbygging av bilder generert i skript

Til slutt er det ingen grunn til at du ikke kunne gi et frittstående bildeskript og deretter legge inn det resulterende bildet på en dynamisk side generert av et annet skript ved å spesifisere i beskrivelsen URL til dette skriptet. Den eneste vanskeligheten er å velge hvordan du skal overføre de nødvendige dataene til den avhengige siden. For eksempel kan et håndtak som indikerer et innebygd bilde se slik ut:

I dette tilfellet returnerer ballpage.php-skriptet PNG-bilder av fargede kuler plassert på forskjellige posisjoner i bildet.

Men bruk av denne tilnærmingen kan forårsake problemer fordi nettservere og nettlesere noen ganger sjekker suffiksene til filene som behandles, og når de mottar resultatene av kontrollen, reagerer de annerledes på dem. For eksempel kan ballsidegjengivelsesskriptet måtte gis en .php-utvidelse slik at Apache-serveren kan bestemme at serverkoden skal tolkes som PHP-kode (selv om den nødvendige behandlingsmodusen også kan spesifiseres gjennom konfigurasjonsfiler).

Det finnes imidlertid også ikke-standard versjoner av nettlesere som ikke tar hensyn til muligheten for at en fil med en .php-utvidelse produserer et bilde, selv om overskriften som er bestått indikerer at et bilde følger etter. Derfor, når du bruker denne metoden, må du teste skriptene i forskjellige nettlesere og sørge for at den tiltenkte brukerkretsen vil motta sidene i den formen du hadde tenkt.

Nedenfor er eksempler på bruk av gd-biblioteket til å lage bilder.

Et eksempel på bruk av gd-biblioteket: lage enkle former

I følgende eksempel vil vi vise hvordan du bruker gd-biblioteket til å generere en tegning som inneholder enkle geometriske former:

Erstatt innstillingene med dine egne og lagre denne filen under navnet connect-to-database.php i fcdemo-mappen.

La oss sette inn tilfeldige data

Hvis dette var et reelt prosjekt, ville brukertabellen vokse over tid, men for demonstrasjonens skyld må vi sette inn noen data. La oss skrive et lite skript som vil sette inn tilfeldige data i tabellen. Ikke bekymre deg hvis du ikke forstår følgende kode - den er ikke viktig for denne opplæringen.

Lagre denne filen kalt generer-random-data.php alt i samme mappe.

Først inkluderer vi databasetilkoblingsfilen. Deretter setter vi en tidsramme som tidspunktet for brukerregistrering vil bli valgt tilfeldig fra. Du kan endre antall rader som skal settes inn. For å gjøre dette, må du justere $RecordsToInsert-variabelen.

Deretter kjører vi skriptet for å sette inn de genererte postene i databasen. For å starte denne prosessen, gå til denne adressen - http://localhost/fcdemo/generate-random-data.php.

Til slutt bør du se meldingen: "Sett inn ($RecordsToInsert) poster"

Trinn 2. Forbered nettsideskjelettet

Vi må lage en veldig enkel side for å vise diagrammet vårt. Noe sånt som dette:

FusionCharts v3.2 - LinkedCharts PHP-demo