Lucrul cu imagini pe php

În acest articol, vreau să vorbesc despre problema cu care se confruntă orice dezvoltator web, care dezvoltă un administrator pentru magazinul online.
Vorbesc despre procesarea imaginilor.







Desigur, puteți procesa imaginea în Photoshop și numai apoi încărcați-o pe server. Și ce dacă managerul de conținut al site-ului "mătușa Lusia", care nici măcar nu-și imaginează că fotografiile pot fi editate cu altceva decât foarfece și creioane, va descărca poze? În acest caz, toate eforturile dvs., câteodată minunate, cu privire la aspectul șablonului site-ului, pot merge la "mătușa Luce" la al cincilea punct.

E timpul, și am decis să umpleți acest gol în cunoștințele mele. Despre asta acum și vorbește.

Să începem cu prima problemă pe care am întâlnit-o este convertirea .png la .jpg folosind php. Se pare că ar fi schimbat extensia și e gata. Dar dacă începeți să lucrați cu imaginea rezultată prin php, erorile apar imediat.

Pentru a converti png în jpg, am scris următoarea funcție:

Să analizăm linia funcțională după linie:

Doi parametri sunt transmise funcției. Prima este calea către imagine, cea de-a doua este calea către imaginea rezultată. Este făcut pentru confort și flexibilitate de utilizare. Rețineți că, pentru astfel de lucruri, calea trebuie să fie absolută, relativ la rădăcina serverului. Deci parametrii trebuie să aibă forma:

Apoi, funcția verifică dacă fișierul există sau nu. Acest lucru este mai mult pentru comoditate.

Avem nevoie de variabila de tipul $ pentru a determina tipul fișierului. Acest lucru este, de asemenea, necesar pentru funcționarea corectă a programului, deoarece Dacă imaginea nu este png, atunci funcția va declanșa o eroare.

Dacă căutați o descriere a funcției getimagesize () pe Internet, atunci veți găsi cel mai probabil ceva de genul "returnează dimensiunile imaginii". De fapt, totul este diferit. Funcția returnează nu numai dimensiunile, ci și biții, numărul de canale și tipul de fișier, dar este, retragerea.
Deci, cu această funcție, vom obține tipul fișierului și vom verifica dacă acesta trebuie să fie png. În caz contrar, programul va copia pur și simplu imaginea originală cu numele imaginii finale. Sarcina este încă aceasta)))

Începând cu linia a șaptea, funcția creează un obiect special din imagine, cu care este deja posibil să se lucreze programat. Acest obiect este stocat în variabila sursă $.







imagecreatetruecolor () funcția creează o imagine de dimensiunea specificată în negru (implicit în continuare vom vopsi). Asta o vom pune sub png, pentru a umple fundalul cu culoarea albă.

Funcția imagecolorallocate () creează doar o umplutură albă care fuzionează cu imaginea sursă $ function (). Deci avem un fundal alb.
Și ultimul pas, care este merită atenție, este unirea un fundal alb, cu o imagine png-a venit la jpg.
Ultima - pasul final din obiect este format din funcția imagine imagejpeg (). Obiectul însuși, calea în care va fi creată imaginea, îi vor fi transmise, iar calitatea (75 va fi suficientă).

La sfârșit, după cum se poate vedea din numele funcțiilor, memoria RAM este eliberată de funcția imagedestroy (), care nu este necesară, deoarece după terminarea scriptului php, memoria este întotdeauna eliberată automat, dar dacă după conversia imaginii programul continuă să funcționeze sau funcția funcționează într-un ciclu, este mai bine să ștergeți memoria - de la păcat.

Deci avem o funcție simplă, la prima vedere.

Dacă sunteți interesat în conversia JPEG în PNG. creând un fundal transparent pentru imagine, puteți citi despre el aici. În acest articol, nu am vorbit despre asta, pentru că aceasta este o poveste separată și necesită o analiză separată.

Următoarea problemă cu coaja pe care am întâlnit-o este redimensionarea imaginii pe php.

Aici mi-a ajutat următoarea funcție, pe care trebuia să o colectez de pe forumurile Pendosov:

Această funcție este oarecum similară celei anterioare, dar este puțin mai versatilă.

În primul rând, determină tipul fișierului și, în funcție de tip, creează diferite obiecte. Același lucru este valabil și pentru crearea fișierelor la sfârșitul funcției.
În al doilea rând, dacă specifică lățimea imaginii în plus față de referința imaginii, aceasta va întinde imaginea și va calcula în paralel cât de mult trebuie făcută înălțimea pentru a păstra raportul de aspect al imaginii.

În cazul în care funcția de alimentare a treilea parametru - înălțimea imaginii, acesta nu va respecta proporțiile și le modul în care sunt specificate în parametrii fac.

Acum, presupuneți că aspectul magazinului dvs. online este proiectat numai pentru o imagine pătratică de 500 cu 500 de pixeli. Un manager "mătușa Lusia" încarcă ceea ce este.

Desigur, puteți utiliza funcția anterioară și puteți seta ultimii doi parametri la 500 și 500. Dar în acest caz, dacă imaginea nu este inițial pătrată, atunci vom obține o "rușine" extinsă la ieșire.

Pentru a evita acest lucru, a trebuit să rescriu funcția în așa fel încât să se potrivească cu orice imagine într-un pătrat, păstrând proporțiile sale (redimensionarea proporțională):

Este deja mai universal și foarte asemănător cu cel precedent, cu excepția faptului că necesită doar doi parametri: calea spre imagine și dimensiunea uneia dintre laturi. Creează un pătrat alb de culoare albă, modifică proporțional dimensiunea imaginii originale și le suprapune unul pe celălalt. Ca rezultat, obținem o imagine frumoasă și proporțională a mărimii de care avem nevoie.

Dacă veți găsi orice inexactități, îi voi asculta cu plăcere.







Articole similare

Trimiteți-le prietenilor: