Internett ville være ganske kjedelig uten bilder. Imidlertid kan vedlikehold og manipulering av hundrevis eller tusenvis av bilder for ditt nettsted være hodepine. Siden nettstedet ditt endres, må du kanskje endre alle bildene dine. For eksempel må du kanskje konvertere alle bildene til gråtoner eller endre størrelsen på dem til 50% av originalstørrelsen. Du vil kanskje også komprimere eller beskjære forskjellige bilder. Å gjøre dette manuelt er tidkrevende og feilaktig, men med litt programmeringskunnskap kan den automatiseres.
I denne opplæringen lærer du om GD (Graphic Draw) biblioteket i PHP. Du får se hvordan dette biblioteket kan brukes til å manipulere bilder ved å endre størrelse, beskjære, rotere eller filtrere dem.
PHP kan gjøre mye mer enn bare å tjene HTML til besøkende. For eksempel har den muligheten til å manipulere bilder. Ikke bare det, men du kan også lage dine egne bilder fra bunnen av, og deretter enten lagre dem eller tjene dem til brukere.
PHP kan håndtere nesten alle dine grunnleggende bildebehandlingsbehov ved å bruke GD-biblioteket - kort for Graphic Draw.
Hvis du jobber med Windows, kan du inkludere php_gd2.dll filen som en utvidelse i php.ini. Hvis du bruker noe som XAMPP, finner du php_gd2.dll fil i katalogen xampp \ php \ ext. Du kan også sjekke om GD er installert på systemet ved hjelp av funksjonen phpinfo ();
. Hvis du ruller gjennom den resulterende produksjonen, finner du noe som ligner på følgende.
Du kan også besøke kravene og installasjonssider for å lære mer om installasjonsprosessen.
Det første skrittet mot manipulering av bilder ved hjelp av PHP, er å laste dem inn i minnet som en bilderessurs. Dette kan oppnås ved å bruke forskjellige funksjoner for forskjellige formater. Alle disse funksjonene har svært likt navn slik at de er lette å huske.
De Image ()
funksjonen vil være nyttig hvis du ikke har en original bildekilde som du vil manipulere. Den aksepterer to heltallsparametre: en bredde og høyde. Det vil returnere en bilde ressurs hvis alt gikk som planlagt. Den returnerte bildressursen er i utgangspunktet et svart bilde med spesifisert bredde og høyde.
Hvis du planlegger å manipulere bilder som allerede er lagret et sted, vil du dra nytte av å bruke funksjoner som imagecreatefromjpeg ()
, imagecreatefrompng ()
, og imagecreatefromgif ()
. Disse vil opprette en bilde ressurs med alle dataene fra den lastede bildefilen. Disse funksjonene godtar en enkelt parameter som spesifiserer plasseringen av bildet du laster inn enten som en URL eller som en filbane.
GD-biblioteket lar deg også lage bilder fra en streng ved hjelp av imagecreatefromstring ()
funksjon i PHP. Husk at du må bruke base64_decode ()
på den oppgitte strengen før imagecreatefromstring ()
. Funksjonen kan automatisk oppdage om bildetypen er JPG, PNG, GIF eller et annet støttet format.
Noen vanlige operasjoner som du kanskje vil utføre på en bildressurs, er rotasjon, skalering, beskjæring og flipping.
Du kan rotere et bilde som du allerede har lastet inn i skriptet ved hjelp av imagerotate ()
funksjon. Det vil rotere bildet i den angitte vinkelen ved hjelp av midten av bildet som rotasjonssenter. Vinkelen er gitt som en flyteverdi, og PHP anser det å være graden for rotasjon.
Noen ganger vil det roterte bildet ha forskjellige dimensjoner i forhold til den opprinnelige versjonen. Dette betyr at du vil ende opp med et avdekket område etter rotasjonen. Den tredje parameteren til imagerotate ()
funksjonen kan brukes til å angi bakgrunnsfargen til det tomme området etter rotasjon.
Det er veldig enkelt å skalere et bilde ved hjelp av GD-biblioteket. Du må bare passere bildressursen, samt bredden og høyden til imagescale ()
funksjon. Hvis du utelater høyden, vil GD skalere bildet til den angitte bredden mens du beholder bildeforholdet.
Du kan også angi modusen for å skalere bildet. Det kan settes til IMG_NEAREST_NEIGHBOUR
, IMG_BILINEAR_FIXED
, IMG_BICUBIC
, etc. En viktig ting du må huske er at denne funksjonen returnerer en ny skalert bildekilde i stedet for å endre den opprinnelige.
Du kan beskjære hvilken som helst bilde ressurs ved hjelp av imagecrop ()
fungere i GD. Den første parameteren er den opprinnelige bildressursen, og den andre parameteren er en assosiativ array med tastene x
, y
, bredde
, og høyde
, Angi posisjon og dimensjoner for beskjæringsvinduet.
Butterflybildet ovenfor ble beskåret ved å bruke følgende kode:
$ im_php = imagecreatefromjpeg ('bane / til / bilde'); $ size = min (imagesx ($ im_php), imagesy ($ im_php)); $ im_php = imagecrop ($ im_php, ['x' => $ størrelse * 0,4, 'y' => 0, 'bredde' => $ størrelse, 'høyde' => $ størrelse]); $ im_php = imagescale ($ im_php, 300);
I utgangspunktet lagrer vi lengden på den minste siden i $ størrelse
variabel. Denne variabelen brukes da til å definere grensen til vårt beskjæringsrektangel. Til slutt blir bildet nedskilt slik at det kun er 300 piksler bredt og langt. Dette gir oss et riktig størrelse firkantet bilde.
Bilder kan vendes horisontalt, vertikalt eller i begge retninger ved hjelp av imageflip ()
funksjon. Den aksepterer bildet ressursen du vil vende som den første parameteren og flip-modus som den andre parameteren. Flip-modusen kan settes til IMG_FLIP_HORIZONTAL
, IMG_FLIP_VERTICAL
, eller IMG_FLIP_BOTH
.
Det øverste venstre bildet i figuren ovenfor er originalen. Det øverste høyre bildet ble opprettet ved hjelp av IMG_FLIP_HORIZONTAL
, nederst venstre bilde ble opprettet ved hjelp av IMG_FLIP_VERTICAL
, og nederst høyre bilde ble opprettet ved hjelp av IMG_FLIP_BOTH
. (Kråka bildet er fra Pixabay.)
GD har også en veldig nyttig imagefilter ()
funksjon som kan bruke filtre på forskjellige bilderessurser lastet ved hjelp av funksjonene fra tidligere bilder. Denne funksjonen kan akseptere ulike parametere avhengig av filteret du søker på.
Til å begynne med, angi bilderessursen og navnet på filteret du vil bruke. Du kan sette den til en av de 12 forhåndsdefinerte filtertyper som er nevnt i dokumentene.
IMG_FILTER_NEGATE
: reverserer fargene i bildetIMG_FILTER_GRAYSCALE
: fjerner farge fra bildetIMG_FILTER_BRIGHTNESS
: gjør bildet lysere eller mørkereIMG_FILTER_CONTRAST
: Øker bildekontrast IMG_FILTER_COLORIZE
: toner bildet til en valgt fargeIMG_FILTER_EDGEDETECT
: fremhever kantene på bildetIMG_FILTER_EMBOSS
: Ligner kantdeteksjon, men gir hver kant en hevet utseendeIMG_FILTER_GAUSSIAN_BLUR
: Blurser bildet ved hjelp av Gauss-metodenIMG_FILTER_SELECTIVE_BLUR
: Blurser bildet ved hjelp av den selektive metodenIMG_FILTER_MEAN_REMOVAL
: En effekt for å lage et stilisert bildeIMG_FILTER_SMOOTH
: glattar kantede kanter i bildetIMG_FILTER_PIXELATE
: gjør bildet ser pixelert ut Noen filtre som negere
, GRÅSKALA
, EDGE_DETECT
og Relieff
trenger ikke ytterligere data. Andre filtre, som LYS
, KONTRAST
og GLATT
, kan akseptere en ekstra parameter som angir mengden lysstyrke, kontrast eller glatthet av det endelige bildet. De Pixelate
parameteren lar deg spesifisere to tilleggsparametere: blokkstørrelsen samt modusen for pixelering. Endelig, den Farge
filteret godtar fire parametere som bestemmer verdiene for de røde, grønne og blå komponentene, samt alfakanalen.
Bildet øverst til venstre er originalen. Det øverste høyre bildet ble opprettet ved hjelp av Farge
filter, nederst til venstre ble opprettet ved hjelp av GRÅSKALA
filter, og bildet nederst til høyre ble opprettet ved hjelp av LYS
filter. (Dette bildet ble funnet på Pixabay.)
Du bør også vite om noen andre vanlige GD-funksjoner som kommer til nytte hver nå og da.
Du kan bestemme bredden og høyden til en bilde ressurs ved hjelp av imagesx ()
og imagesy ()
funksjoner.
En annen funksjon kalles getimagesize ()
kan også brukes til å få bredde og høyde på et bilde sammen med sin type. Denne funksjonen returnerer en matrise med elementer som angir bredden, høyden og formatet på bildet. De to første elementene i arrayet beskriver bredden og høyden, og det tredje elementet inneholder en konstant spesifisering av filformatet: en av IMAGETYPE_PNG
, IMAGETYPE_GIF
, etc.
Når du har gjort alle ønskede endringer i et bilde, vil du mest sannsynlig enten sende den til nettleseren eller lagre den som en fil. I begge tilfeller må du bruke en av GD-utgangsfunksjonene som imagejpeg ()
, imagepng ()
, eller imagegif ()
. Du vil overføre bilderessursen til en av disse utgangsfunksjonene, og hvis du vil lagre bildet i en fil, spesifiserer du også et filnavn. Du kan også kontrollere kvaliteten på utdatabildet ved hjelp av en tredje valgfri parameter, avhengig av bildetypen.
La oss bruke kunnskapen vi har fått så langt til å gjøre noe praktisk. I denne delen vil vi endre størrelsen på alle JPEG-bildene i en bestemt katalog for å ha en bredde på 640 piksler. Høyden beregnes automatisk basert på dimensjonene til det opprinnelige bildet.
Vi lagrer de endrede bildene i en ny mappe med tittelen Endret størrelsen. Alle de opprinnelige bildene i dette tilfellet har samme dimensjoner, men koden vil fungere skikkelig med bilder som har forskjellige størrelser og størrelsesforhold.
$ directory = 'Nature /'; $ images = glob ($ directory. "*. jpg"); foreach ($ bilder som $ image) $ im_php = imagecreatefromjpeg ($ image); $ im_php = imagescale ($ im_php, 640); $ new_height = imagesy ($ im_php); $ new_name = str_replace ('- 1920x1080', '-640x'. $ new_height, basename ($ image)); imagejpeg ($ im_php, $ directory.'Resized /'.$ new_name);
I ovennevnte kode begynner vi å bruke glob ()
funksjon for å finne alle bildene med a .jpg utvidelse i katalogen med tittelen Natur. Bildefilene lagres i en matrise, og vi slår over dem en etter en.
Siden alle bildene vi ønsker å endre størrelse på, er JPEG, bruker vi imagecreatefromjpeg ()
funksjon for å laste dem inn i skriptet. De imagescale ()
funksjonen brukes da til å endre størrelsen på bildet til en bestemt bredde på 640 piksler i vårt tilfelle. Vi har ikke angitt en fast høyde, så høyden beregnes automatisk.
Hver av de opprinnelige bildefilene hadde -1920x1080 lagt til filnavnet for å indikere dens dimensjoner. Vi bruker str_replace ()
på det opprinnelige filnavnet og erstatt -1920X1080 med den nye bildestørrelsen.
Til slutt lagrer vi de endrede bildene i en navngitt mappe Endret størrelsen med de nye filnavnene. Du kan også sende en tredje parameter til imagejpeg ()
funksjon for å angi kvaliteten på den lagrede bildefilen. Hvis den tredje parameteren utelates, lagres bildene med en standardkvalitet på 75.
Denne gangen vil vi bruke to forskjellige filtre på hvert bilde i katalogen vår og lagre sluttresultatet i en annen katalog uten å gjøre endringer i filnavnet. La oss dykke inn i koden, og jeg vil forklare hva hver funksjon gjør senere.
$ directory = 'Nature /'; $ images = glob ($ directory. "*. jpg"); foreach ($ bilder som $ image) $ im_php = imagecreatefromjpeg ($ image); bildefilter ($ im_php, IMG_FILTER_GRAYSCALE); imagefilter ($ im_php, IMG_FILTER_CONTRAST, -25); $ new_name = basenavn ($ image); imagejpeg ($ im_php, $ directory.'Grayscale /'.$ new_name);
Som du kan se, laster vi bildene fra Natur katalog nøyaktig som vi gjorde for det forrige eksempelet. Vi bruker imidlertid imagefilter ()
Funger denne gangen for å bruke filtre på den lastede bildressursen.
Legg merke til det imagefilter ()
endrer det opprinnelige bildet og returnerer EKTE
eller FALSK
basert på suksess eller feil i operasjonen. Dette er forskjellig fra imagescale ()
funksjonen vi brukte i forrige seksjon, som returnerte den skalerte bildressursen.
En annen viktig ting å huske på er at kontrastfilteret aksepterer verdier fra -100 til 100. Negative verdier innebærer mer kontrast, og positive verdier innebærer mindre kontrast. Dette er motsatt av hva noen kan forvente! En verdi på 0 vil la bildet være uendret.
Lysstyrkefilteret har derimot minimum og maksimumsgrenser på -255 og 255. Den negative verdien i dette tilfellet innebærer minimum lysstyrke, og den positive verdien tilsier maksimal lysstyrke.
Vi får filnavnet fra filbanen ved hjelp av basename ()
funksjonen og lagre bildet ved hjelp av imagejpeg ()
funksjon.
Målet med denne opplæringen var å gjøre deg kjent med GD-biblioteket i PHP og å vise deg hvordan du bruker alle disse funksjonene for å gjøre livet enklere. Du kan bruke eksemplene på slutten av opplæringen som en veiledning for å skrive dine egne bildemanipuleringsskript. For eksempel kan du bare endre størrelsen på et bilde hvis det er bredere enn en gitt grense ved å bestemme bredden ved hjelp av imagesx ()
funksjon.
Alle disse funksjonene åpner opp mange muligheter for å gjøre bildet manipulasjon enklere og spare deg mye tid til slutt. Hvis du har noen spørsmål knyttet til denne opplæringen, vennligst gi beskjed i kommentarene.