✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Carica e ridimensiona più immagini in Laravel

120

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.

Carica e ridimensiona più immagini in Laravel

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.phpfile e aggiungi i fornitori di servizi, facciata in esso. Aggiungere i fornitori di servizi per questo pacchetto $providersall’array.

InterventionImageImageServiceProvider::class,

Aggiungi la facciata $aliasesall’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/publiccartella. Per accedere a questi file sul Web, è necessario creare un collegamento simbolico da public/storagea 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

Fonte di registrazione: artisansweb.net

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More