Advertisement
  1. Code
  2. PHP

Ridimensionamento di immagini con PHP

Scroll to top
Read Time: 11 min

Italian (Italiano) translation by Francesco (you can also view the original English article)

Hai mai desiderato un metodo facile da usare per ridimensionare le immagini in PHP? Beh ecco a cosa servono le classi PHP - parti riutilizzabili di funzionalità che possiamo chiamare per fare il lavoro sporco dietro le quinte. Stiamo andando ad imparare come creare la nostra classe che sarà ben costruita, ed anche espandibile. Il ridimensionamento dovrebbe essere facile. Quanto facile? Come circa tre passi!


Introduzione

Per dare un rapido sguardo a ciò che stiamo cercando di realizzare con la nostra classe, la classe deve essere:

  • Facile da usare
  • Formato indipendente. Cioè, aprire, ridimensionare e salvare un numero di formati di immagini diverse.
  • Ridimensionamento intelligente - nessuna distorsione di immagine!

Nota: Questo non è un tutorial su come creare classi e oggetti, e anche se questa abilità avrebbe aiutato, non è necessario al fine di seguire questo tutorial.

C'è un sacco da fare - cominciamo.


Fase 1 preparazione

Cominceremo in modo facile. Nella directory di lavoro creamo due file: uno chiamato index.php, l'altro resize-class.php


Passo 2 Chiamare l'oggetto

Per darti un'idea di che cosa stiamo cercando di ottenere, inizieremo con codificare le chiamate che useremo per ridimensionare le immagini. Aprite il file index.php e aggiungete il codice riportato di seguito.

Come potete vedere, c'è una bella logica per ciò che stiamo facendo. Apriamo il file di immagine, impostiamo le dimensioni che vogliamo per ridimensionare l'immagine e il tipo di ridimensionamento.
Quindi salviamo l'immagine, scegliamo il formato di immagine che vogliamo e la qualità dell'immagine. Salvate e chiudete il file index.php.

Dal codice sopra potete vedere che stiamo aprendo un file jpg ma salviamo un file gif. Ricordate, si tratta di flessibilità.


Passaggio 3 Scheletro della classe

È l'Object-Oriented Programming (OOP) che rende possibile questo senso di facilità. Pensate a una classe come un modello; è possibile incapsulare i dati - un altro termine che significa davvero solo nascondere i dati. Quindi possiamo riutilizzare più e più volte questa classe senza la necessità di riscrivere il codice di ridimensionamento - è sufficiente chiamare i metodi appropriati, proprio come abbiamo fatto nel passo 2. Una volta che il nostro modello è stato creato, creamo istanze di questo modello, chiamati oggetti.

"La funzione di costrutto, conosciuta come costruttore, è un metodo di classe speciale che viene chiamato dalla classe quando si crea un nuovo oggetto".

Iniziamo a creare la nostra classe di ridimensionamento. Aprite il file resize-class.php. Di seguito è riportato uno scheletro di classe davvero essenziale che ho chiamato 'resize'. Notate la riga di commento variabile di classe; questo è dove inizieremo ad aggiungere le variabili di classe importanti in seguito.

La funzione di costrutto, conosciuta come costruttore, è un metodo di classe speciale (il termine "metodo" è la stessa funzione, tuttavia, quando si parla di classi e oggetti spesso viene utilizzato il termine metodo) che viene chiamato dalla classe quando si crea un nuovo oggetto. Questo lo rende adatto per fare alcune inizializzazioni - che faremo nel passaggio successivo.

Si noti che c'è un doppio carattere di sottolineatura per il metodo di costrutto.


Fase 4 il costruttore

Stiamo andando a modificare il metodo costruttore sopra. In primo luogo, passeremo il nome (e percorso) della nostra immagine da ridimensionare. Chiameremo questa variabile $fileName.

Abbiamo bisogno di aprire il file passato con PHP (più specificamente la libreria PHP GD) così che PHP possa leggere l'immagine. Lo stiamo facendo con il metodo personalizzato 'openImage'. Vi dirò come funziona questo metodo
in un attimo, ma per ora, abbiamo bisogno di salvare il risultato come una variabile di classe. Una variabile di classe è solo una variabile - ma è specifica per tale classe. Ricordate il commento di variabile di classe che ho citato in precedenza? Aggiungi 'image' come una variabile privata digitando 'private $image;'. Impostando la variabile come 'Private' si sta impostando l'ambito di tale variabile che quindi è accessibile solo dalla classe. Da ora in poi possiamo fare una chiamata alla nostra immagine aperta, nota come una risorsa, che faremo più tardi quando ridimensioneremo.

Visto che siamo in argomento, archiviamo l'altezza e la larghezza dell'immagine. Ho la sensazione che questo sarà utile più tardi.

Si dovrebbe ora avere il seguente.

I metodi magesy e imagesx sono costruiti in funzioni che fanno parte della libreria GD. Recuperano la larghezza e l'altezza dell'immagine, rispettivamente.


Passo 5 aprendo l'immagine

Nel passaggio precedente, chiamiamo il metodo personalizzato openImage. In questo passaggio stiamo andando a creare quel metodo. Vogliamo che lo script faccia quello che vogliamo, quindi a seconda del tipo di file che viene passato, lo script dovrebbe determinare quale funzione di libreria GD chiamare per aprire l'immagine. Questo è facilmente ottenibile confrontando l'estensione di file con un'istruzione switch.

Passiamo il file che vogliamo ridimensionare e restituiamo tale risorsa di file.


Passaggio 6 come ridimensionare

Questo è dove tutto accade. Questo passaggio è davvero solo una spiegazione di che cosa stiamo andando a fare - quindi nessun compito qui. Nel passaggio successivo, stiamo andando a creare un metodo pubblico che chiameremo per eseguire il nostro ridimensionamento; quindi ha senso passare la larghezza e altezza, nonché informazioni su come vogliamo ridimensionare l'immagine. Parliamone un attimo. Ci saranno scenari dove si desidera ridimensionare un'immagine a una dimensione esatta. Grande, includiamolo. Ma ci saranno anche momenti in cui è necessario ridimensionare centinaia di immagini e ogni immagine ha un rapporto di aspetto diverso - pensiamo ai ritratti. Ridimensionamento di queste a una dimensione esatta causerà gravi distorsioni. Se diamo uno sguardo alle nostre opzioni per evitare la distorsione possiamo:

  1. Ridimensionare l'immagine quanto più vicino possibile alle nostre nuove dimensioni di immagine, pur mantenendo le proporzioni.
  2. Ridimensionare l'immagine quanto più vicino possibile alle nostre nuove dimensioni di immagine e ritagliare la parte restante.

Entrambe le opzioni sono possibili, a seconda delle esigenze.

Sì. stiamo per tentare di gestire tutto quanto sopra. Per ricapitolare, stiamo andando a fornire opzioni per:

  1. Ridimensionare a larghezza/altezza esatta. (esatta)
  2. Ridimensionamento di larghezza - la larghezza esatta verrà impostata, l'altezza verrà regolata secondo proporzioni. (paesaggio)
  3. Ridimensionamento di altezza - come ridimensionamento di larghezza, ma verrà impostata l'altezza e larghezza regolata dinamicamente. (ritratto)
  4. Auto determinare le opzioni 2 e 3. Se stai scorrendo una cartella con foto di diverse dimensioni, lasciare che sia lo script a determinare come gestire tutto. (auto)
  5. Ridimensionare, poi ritagliare. Questo è il mio preferito. Dimensioni esatte, nessuna distorsione. (ritaglio)

Passo 7 ridimensionamento. Facciamolo!

Ci sono due parti per il metodo di ridimensionamento. La prima è sempre la larghezza ottimale e l'altezza per la nostra nuova immagine creando alcuni metodi personalizzati - e naturalmente passando la nostra 'opzione' di ridimensionamento come descritto sopra. La larghezza e l'altezza sono restituiti come array e impostate nelle loro rispettive variabili. Sentitevi liberi di 'passare come riferimento'- ma io non sono un grande fan.

La seconda parte è quella che esegue il ridimensionamento effettivo. Per mantenere questo tutorial breve, vi farò leggere qualcosa sulle seguenti funzioni di GD:

Inoltre, salviamo l'output del metodo imagecreatetruecolor (una nuova immagine di vero colore) come una variabile di classe. Aggiungete 'private $imageResized;' alle altre variabili di classe.

Il ridimensionamento viene eseguito da un modulo PHP, conosciuto come la libreria GD. Molti dei metodi che utilizziamo sono forniti da questa libreria.


Fase 8 l'albero delle decisioni

Più lavoro fai ora, meno dovrai fare quando si ridimensiona. Questo metodo sceglie la strada da prendere, con l'obiettivo di ottenere l'ottimale ridimensionamento di larghezza e altezza basato sulla vostra opzione di ridimensionamento. Potrà chiamare il metodo appropriato, che creeremo nel passaggio successivo.


Passaggio 9 dimensioni ottimali

Abbiamo già discusso cosa fanno questi quattro metodi. Sono solo calcoli di base di matematica, davvero, che consentono di calcolare la nostra misura migliore.


Passaggio 10 Ritaglio

Se hai optato per un ritaglio - cioè, hai utilizzato l'opzione Ritaglia, hai un piccolo passaggio in più. Stiamo andando a ritagliare l'immagine dal
centro. Il ritaglio è un processo molto simile al ridimensionamento, ma con un paio di parametri in più del ridimensionamento.


Passaggio 11 salvare l'immagine

Ci siamo quasi; quasi finito. Ora è il momento di salvare l'immagine. Passiamo il percorso e la qualità dell'immagine che vorremmo che va da 0-100, 100 è il migliore, e chiameremo il metodo appropriato. Un paio di cose da notare riguardo la qualità dell'immagine: JPG utilizza una scala di 0-100, 100 è il migliore. Le immagini GIF non hanno un'impostazione di qualità di immagine. PNG ce l'hanno, ma usano la scala 0-9, 0 è il migliore. Questo non è bene perchè non possiamo aspettarci di ricordare questo ogni volta che vogliamo salvare un'immagine. Facciamo un po' di magia per standardizzare tutto.

Ora è anche un buon momento per distruggere la nostra risorsa di immagine per liberare memoria. Se si dovesse usare questo in produzione, potrebbe anche essere una buona idea di catturare e restituire il risultato dell'immagine salvata.


Conclusione

Beh questo è tutto, gente. Grazie per aver seguito questo tutorial, spero che vi sia utile. Gradirei il vostro feedback, attraverso i commenti qui sotto.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
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.