Carica e ridimensiona più immagini in Laravel
Oltre a questo blog, sto gestendo un canale YouTube in cui condivido i video tutorial. Recentemente uno degli abbonati al canale YouTube ha chiesto di ridimensionare più immagini in Laravel. Vogliono ridimensionare più immagini in una volta sola. In questo articolo, studiamo come caricare e ridimensionare più immagini in Laravel.
Intervention Image è una libreria open source che ci permette di manipolare le immagini. Userò questa libreria per ridimensionare le immagini.
Iniziare
Per raggiungere il nostro obiettivo è necessario installare e configurare la libreria Intervention Image nel progetto Laravel. Apri il terminale nella directory principale del tuo progetto ed esegui il comando:
composer require intervention/image
Una volta installata la libreria, apri il config/app.php
file e aggiungi i fornitori di servizi, facciata in esso. Aggiungere i fornitori di servizi per questo pacchetto $providers
all’array.
InterventionImageImageServiceProvider::class,
Aggiungi la facciata $aliases
all’array.
'Image' => InterventionImageFacadesImage::class,
Successivamente, abbiamo bisogno di una directory in cui archiviare i nostri file caricati. Laravel Filesystem fornisce un disco pubblico per archiviare i file. Il disco pubblico contiene file accessibili pubblicamente. Troverai i file caricati nella storage/app/public
cartella. Per accedere a questi file sul Web, è necessario creare un collegamento simbolico da public/storage
a storage/app/public
.
Crea un collegamento simbolico usando il comando:
php artisan storage:link
Questo comando creerebbe una cartella di archiviazione nella directory pubblica. Qui è dove memorizziamo i nostri file.
Carica e ridimensiona le immagini in Laravel
Per caricare file su un server, è necessario un modulo. Creiamo un modulo in cui è possibile selezionare più file da caricare su un server. Di seguito è riportato un codice di esempio del modulo che verrà inserito nel file di visualizzazione.
<form action="{{ url('ROUTE HERE') }}" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="exampleInputFile">File input</label>
<input type="file" name="profile_image[]" id="exampleInputFile" multiple />
</div>
{{ csrf_field() }}
<button type="submit" class="btn btn-default">Submit</button>
</form>
Nel modulo, ho preso un nome di input di file come "profile_image[]" che invia una serie di file al server. Inoltre, ho aggiunto un attributo "multiplo" che ci consente di selezionare più file. Sostituisci il segnaposto ROUTE_URL con il tuo valore effettivo.
Poiché dobbiamo caricare e ridimensionare le immagini, nel controller aggiungi due facciate come segue.
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use Image; //Intervention Image
use IlluminateSupportFacadesStorage; //Laravel Filesystem
class ImageController extends Controller
{
}
Aggiungendo la facciata, è possibile chiamare le funzioni di ridimensionamento della libreria di immagini di intervento. Nel codice seguente, caricherò i file in due posti. Uno è l’immagine originale. Il secondo si trova nella directory delle miniature. Per prima cosa carichiamo l’immagine originale nella cartella delle miniature e poi la ridimensioniamo.
public function store(Request $request)
{
if ($request->hasFile('profile_image')) {
foreach($request->file('profile_image') as $file){
//get filename with extension
$filenamewithextension = $file->getClientOriginalName();
//get filename without extension
$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
//get file extension
$extension = $file->getClientOriginalExtension();
//filename to store
$filenametostore = $filename.'_'.uniqid().'.'.$extension;
Storage::put('public/profile_images/'. $filenametostore, fopen($file, 'r+'));
Storage::put('public/profile_images/thumbnail/'. $filenametostore, fopen($file, 'r+'));
//Resize image here
$thumbnailpath = public_path('storage/profile_images/thumbnail/'.$filenametostore);
$img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {
$constraint->aspectRatio();
});
$img->save($thumbnailpath);
}
return redirect('ROUTE_URL')->with('success', "Image uploaded successfully.");
}
}
Qui stiamo ridimensionando l’immagine in modo proporzionale. In questo modo, manteniamo le proporzioni e l’immagine non verrà tagliata. Sto passando la larghezza come 400 e l’altezza come 150. Puoi modificare questi valori secondo le tue esigenze.
Vai avanti e provalo. Otterrai la versione ridimensionata delle immagini caricate nella directory ‘storage/profile_images/thumbnail’.
Se stai cercando un ritaglio duro, sostituisci le righe sottostanti
$img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {
$constraint->aspectRatio();
});
$img->save($thumbnailpath);
Con
$img = Image::make($thumbnailpath)->resize(100, 100)->save($thumbnailpath);
Spero che tu capisca come caricare e ridimensionare più immagini in Laravel. Si prega di condividere i tuoi pensieri e suggerimenti nella sezione commenti qui sotto.
articoli Correlati
- Come caricare file su S3 utilizzando Laravel Filesystem
- Come eseguire il backup dell’applicazione Laravel
- Come integrare la newsletter di MailChimp nell’applicazione Laravel