Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Izmjena Veličine Slika na Lakši Način sa PHP-om

by
Difficulty:IntermediateLength:LongLanguages:

Croatian (Hrvatski) translation by Maja Petek (you can also view the original English article)

Jeste li ikada željeli za sve-namjensku, laganu za korištenje metodu promjene veličine slika u PHPu? Pa, za to služe PHP klase - višestruko upotrebljivi dijelovi funkcionalnosti koje zovemo da umjesto nas obave prljav posao iza kulisa. Naučiti ćemo kako kreirati vlastitu klasu koja će biti dobro konstruirana, kao i proširiva. Promjena veličine trebala bi biti lagana. Koliko lagana? Što kažete na tri koraka!


Uvod

Kako bismo vam dali kratki pogled na ono što želimo postići s našom klasom, klasa bi trebala biti:

  • Lagana za upotrebu
  • Neovisna o formatu I.E., otvori, promijeni veličinu, i pohrani broj različitih formata slika.
  • Inteligentno mijenjati veličinu - Bez distorzije slike!

Napomena: Ovo nije tutorial o tome kako izraditi klase i objekte, i premda bi to znanje pomoglo, nije neophodno kako biste pratili ovaj tutorial.

Mnogo je toga za obraditi - Krenimo. 


1. korak Priprema

Početi ćemo lagano. U vašem radnom direktoriju izradite dvije datoteke: jednu nazvanu index.php i drugu resize-class.php


2. korak Pozivanje Objekta

Kako biste dobili ideju o onome što želimo postići, početi ćemo kodirati pozive koji ćemo upotrijebiti za promjenu veličine slika. Otvorite svoju index.php datoteku i dodajte sljedeći kod.

Kao što možete vidjeti, postoji zgodna logika u ovome što radimo. Otvorimo datoteku slike, podesimo dimenzije na koje želimo promijeniti veličinu, i tip promijenjene slike.
Zatim pohranimo sliku, odabirući format koji želimo i kvalitetu slike. Spremite i zatvorite svoju index.php datoteku.

Iz koda iznad možete vidjeti da otvaramo jpg datoteku ali pohranjujemo gif. Ne zaboravite, sve je u fleksibilnosti.


3. korak Kostur Klase

Ono što nam omogućuje ovaj osjećaj lakoće je Object-Oriented Programming (OOP). Razmišljajte o klasi kao o uzorku; podatak možete enkapsulirati - još jedan termin u žargonu koji ustvari znači skrivanje podataka. Ovu klasu zatim možemo opet i opet iznova upotrebljavati bez potrebe za ponovnim pisanjem koda za izmjenu veličine - samo morate pozvati prikladne metode kao što smo učinili u drugom koraku. Jednom kada je uzorak kreiran, izrađujemo instance ovog uzorka, koje se zovu objekti.

"Funkcija konstruiranja, poznata kao konstruktor, je posebna klasa metode koju klasa poziva kada kreirate novi objekt."

Počnimo kreirati našu klasu za promjenu veličine. Otvorite svoju resize-class.php datoteku. Ispod se nalazi veoma bazična struktura kostura klase koju sam nazvao 'resize'. Možete primijetiti varijable klase linije komentara; ovdje ćemo kasnije početi dodavati važne varijable klase.

Funkcija konstruiranja, poznata kao konstruktor, je posebna klasa metode (termin "metoda" je isto što i funkcija, ali ipak, kada govorimo o klasama i objektima, često se koristi termin metoda) koju klasa poziva kada kreirate novi objekt. To nam omogućuje da izvršimo inicijalizaciju - koju ćemo učiniti u sljedećem koraku.

Možete primijetiti da je dvostruka podcrta za konstrukt metodu.


4. korak Konstruktor

Modificirati ćemo konstruktor metodu iznad. Prvo ćemo proslijediti ime datoteke (i putanju) naše slike kojoj će biti promijenjena veličina. Ovu varijablu ćemo nazvati $fileName.

Moramo otvoriti proslijeđenu datoteku u PHPu (točnije u PHP GD Library) kako bi PHP mogao pročitati sliku. Ovo činimo sa prilagođenom metodom 'openImage'. Sada ću doći do toga kako ova metoda
radi, ali za sada, moramo pohraniti rezultat kao varijablu klase. Klasa varijable je samo varijabla - ali je specifična za tu klasu. Sjećate li se klase varijable komentara koji sam ranije spomenuo? Dodajte 'image' kao privatnu varijablu upisujući 'private$image;'. Podešavanjem varijable kao 'Private' podešavate doseg djelovanja te varijable kako bi joj mogla pristupiti samo klasa. Od sada možemo uputiti poziv našoj otvorenoj slici, poznatoj kao resurs, što ćemo učiniti poslije kada ćemo mijenjati veličinu.

Dok smo ovdje, pohraniti ćemo i visinu te širinu slike. Imam osjećaj da će nam to kasnije biti korisno.

Sada biste trebali imati sljedeće.

Metode imagesx i imagesy su ugrađene funkcije koje su dio GD biblioteke. One ponovno vraćaju širinu i visinu vaše slike.


5. korak Otvaranje Slike

U prijašnjem koraku, pozivamo 'custom' metodu openImage. U ovom koraku ćemo kreirati tu metodu. Želimo da skripta umjesto nas odradi razmišljanje, pa, ovisno o tome koji tip datoteke je proslijeđen, skripta bi trebala odrediti koju GD Library funkciju zove da otvori sliku. To se lako postiže uspoređivanjem ekstenzija datoteka sa switch statementom.

Proslijedimo datoteku kojoj želimo izmijeniti veličinu i povratimo taj izvor datoteka.


6. korak Kako Promijeniti Veličinu

Ovdje se odvija glavna radnja. Ovaj korak je ustvari samo objašnjenje onoga što ćemo učiniti - stoga iz ovog nećete dobiti zadaću. U sljedećem koraku kreirati ćemo javnu metodu koju ćemo pozvati da izvedemo izmjenu veličine; zato ima smisla proslijediti širinu i visinu, kao i informaciju o tome kako želimo promijeniti veličinu slike. Popričajmo o ovome na trenutak. Desiti će se situacija kada ćete željeti promijeniti veličinu slike na točno određenu veličinu. Odlično, uključimo i to. Ali također će biti i trenutaka kada ćete željeti izmijeniti veličinu stotine slika i svaka od njih će imati drugačiji omjer - sjetite se portreta. Izmjena veličine tih slika na točno određenu veličinu će uzrokovati tešku distorziju. Ako pogledamo koje su nam opcije da spriječimo distorziju, vidjeti ćete da možemo:

  1. Promijeniti veličinu najbliže što možemo veličini naše nove slike, istovremeno zadržavajući omjer.
  2. Promijeniti veličinu slike najbliže što možemo dimenzijama naše nove slike i obrezati ostatak.

Obje opcije su moguće, ovisno o vašim potrebama.

Da. Pokušati ćemo riješiti sve gore navedene stavke. Da ponovimo, omogućiti ćemo opcije za:

  1. Promijeniti veličinu prema točnoj širini/visini (točnoj)
  2. Promjena veličine po širini - biti će podešena točna širina, a visina će biti prilagođena prema omjeru (pejzaž)
  3. Promjena veličine po visini - identično kao izmjena prema širini, ali će biti podešena visina a širina će se prilagoditi dinamično. (portret)
  4. Auto određivanje opcije 2 i 3. Ako iznova prolazite kroz mapu sa različitim veličinama fotografija, dozvolite da skripta odredi kako će to biti riješeno. (auto)
  5. Promijenite veličinu, zatim obrežite. Ovo je moj favorit. Točna veličine, nema distorzije. (obrezivanje)

7. korak Izmjena Veličine. Učinimo to!

Postoje dva dijela kod metode za promjenu veličine. Prva je postizanje optimalne širine i visine za našu novu sliku kreiranjem nekih prilagođenih metoda - I naravno proslijeđivanjem naše 'opcije' za izmjenu veličine kao što je opisano iznad. Širina i visina su vraćene kao strelice i podešene na njihove odnosne varijable. Možete 'proslijediti kao referencu' (pass as reference)- ali ja nisam baš ljubitelj te opcije.

Drugi dio je ono što izvodi zapravo izmjenu veličine. Kako bismo skratili ovaj tutorial, dati ću vam da pročitate sljedeće GD funkcije:

Također pohranjujemo 'output'  imagecreatetruecolor metode(nova slika stvarnih boja) kao klasu varijable. Dodajte 'private $imageResized;' sa svojom drugom klasom varijable.

Promjena veličine se izvodi sa PHP modulom poznatim kao GD Library. Mnoge od metoda koje koristimo omogućuje nam ta biblioteka.


8. korak Stablo Odlučivanja

Što više posla sada odradite, manje ćete imati za odraditi kada ćete mijenjati veličinu slike. Ova metoda odabire koji put odabrati, s ciljem postizanja optimalne promjene veličine širine i visine bazirane na vašoj opciji za izmjenu veličine. Zvati će prikladnu metodu, od koje ćemo kreirati u sljedećem koraku.


9. korak Optimalne Dimenzije

Već smo diskutirali o tome što ove četiri metode rade. To su ustvari matematičke osnove, koje računaju koji je za nas najbolji rezultat.


10. Korak Obrezivanje

Ako ste se odlučili za obrezivanje - to jest, koristili ste tu opciju, tada vam je preostao još jedan maleni korak. Obrezati ćemo sliku iz
sredine. Obrezivanje je vrlo sličan proces promjeni veličine, ali uz nekoliko dodatnih proslijeđenih parametara za veličinu.


11. korak Pohranite Sliku

Bližimo se kraju; još malo i gotovo. Sada je vrijeme da pohranimo sliku. Proslijeđujemo putanju, i za kvalitetu slike želimo raspon od 0-100, pri čemu je 100 najbolja opcija, te pozivamo prikladnu metodu. Moramo napomenuti nekoliko stvari o kvaliteti slike: JPG koristi skalu od 0-100, od čega je 100 najbolji. GIF slike nemaju opciju podešavanja kvalitete slika. PNG imaju, ali koriste skalu od 0-9, pri čemu je 0 najbolja opcija. To nije dobro pošto ne možemo očekivati da ćemo to upamtiti svaki puta kada želimo spremiti sliku. Uz malo čarolije ćemo sve standardizirati.

Sada je također dobar trenutak da uništimo resurs slike kako bismo oslobodili memoriju. Ako ćete ovo koristiti za produkciju, bilo bi također dobro uhvatiti i vratiti rezultat pohranjene slike.


Zaključak

Pa, to je to. Zahvaljujem se što ste pratili ovaj tutorial i nadam se da će vam biti od koristi. Bilo bi mi drago da u komentarima ostavite svoj 'feedback'.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.