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

Come caricare e comprimere immagini in Laravel

181

Stai cercando come caricare e comprimere le immagini in Laravel? Laravel fornisce un modo semplice per caricare i file. E comprimere le immagini al momento del caricamento è una buona pratica. In questo articolo, ti mostro come caricare e comprimere le immagini in Laravel.

Perché è necessario comprimere le immagini?

Le immagini giocano un ruolo importante nel tuo sito web. Le immagini aggiungono una migliore UX e un’esperienza accattivante per i visitatori. Ma allo stesso tempo, può anche uccidere le prestazioni del sito. Le immagini pesanti rallentano il sito. Di conseguenza, il caricamento del tuo sito richiede molto tempo. Agli utenti non piacciono i siti web lenti. Se il tuo sito impiega più tempo per caricarsi, è molto probabile che tu perda il tuo pubblico. Il tempo di caricamento standard per un sito Web è di 2 secondi. Dovresti fare in modo che il tuo sito si carichi entro 2 secondi.

Sebbene ci siano diversi fattori che devono essere presi in considerazione per migliorare la velocità della pagina, uno di questi è l’uso di immagini ottimizzate. La compressione delle immagini riduce le dimensioni dell’immagine originale senza perderne la qualità. Aiuta ad aumentare la velocità del sito.

Detto questo, vediamo come caricare e comprimere le immagini in Laravel.

Caricamento di immagini in Laravel

Laravel fornisce un modo pulito per caricare le immagini. Per iniziare, dobbiamo prima creare una directory in cui memorizzeremo le immagini. Apri il prompt dei comandi nella directory principale ed esegui il comando seguente.

php artisan storage:link

Questo comando crea una directory di "archiviazione" nella cartella "pubblica".

Quindi, crea un modulo con l’input del file e il pulsante di invio aggiungendo il codice seguente nel file blade.

<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">
    </div>
    {{ csrf_field() }}
    <button type="submit" class="btn btn-default">Submit</button>
</form>

Nell’HTML sopra, ho aggiunto un file di input con il nome ‘profile_image’. Ho anche aggiunto {{ csrf_field() }}che è necessario per inviare i moduli Laravel.

Ora, supponendo che tu invii la richiesta di post al store()metodo del tuo controller, scrivi un codice che memorizzi l’immagine sul server come di seguito.

public function store(Request $request)
{
    if($request->hasFile('profile_image')) {
        //get filename with extension
        $filenamewithextension = $request->file('profile_image')->getClientOriginalName();
 
        //get filename without extension
        $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
 
        //get file extension
        $extension = $request->file('profile_image')->getClientOriginalExtension();
 
        //filename to store
        $filenametostore = $filename.'_'.time().'.'.$extension;
 
        //Upload File
        $request->file('profile_image')->storeAs('public/profile_images', $filenametostore);
 
        //Compress Image Code Here
 
        return redirect('ROUTE_HERE')->with('success', "Image uploaded successfully.");
    }
}

Questo codice crea un nome file univoco e memorizza il file nella directory ‘profile_images’. Laravel genera automaticamente una directory ‘profile_images’ in ‘public/storage’ se non esiste.

Come detto prima, è una pratica migliore ottimizzare l’immagine al momento del caricamento. Abbiamo finito con il codice di caricamento di un’immagine. Ora dobbiamo comprimerlo. Tratterò 2 servizi: TinyPNG e reSmush.it che fornisce le API per comprimere le immagini al volo. Vediamoli uno per uno.

Comprimi le immagini usando TinyPNG in Laravel

Per comprimere le immagini usando TinyPNG API devi ottenere la tua chiave API. Il processo è diretto. Registra il tuo indirizzo e-mail con loro e ti invieranno la chiave sviluppatore.

Una volta ottenuta la chiave API, aggiungila nel .envfile.

Successivamente, installa un pacchetto TinyPNG usando il comando:

composer require tinify/tinify

Al momento dell’installazione del pacchetto, dobbiamo scrivere un codice che comprima l’immagine caricata utilizzando TinyPNG.

Scrivi un codice di compressione appena sotto la riga che carica l’immagine.

//Compress Image Code Here
$filepath = public_path('storage/profile_images/'.$filenametostore);
 
try {
    TinifysetKey(env("TINIFY_API_KEY"));
    $source = TinifyfromFile($filepath);
    $source->toFile($filepath);
} catch(TinifyAccountException $e) {
    // Verify your API key and account limit.
    return redirect('ROUTE_HERE')->with('error', $e->getMessage());
} catch(TinifyClientException $e) {
    // Check your source image and request options.
    return redirect('ROUTE_HERE')->with('error', $e->getMessage());
} catch(TinifyServerException $e) {
    // Temporary issue with the Tinify API.
    return redirect('ROUTE_HERE')->with('error', $e->getMessage());
} catch(TinifyConnectionException $e) {
    // A network connection error occurred.
    return redirect('ROUTE_HERE')->with('error', $e->getMessage());
} catch(Exception $e) {
    // Something else went wrong, unrelated to the Tinify API.
    return redirect('ROUTE_HERE')->with('error', $e->getMessage());
}

Il codice precedente prende un’immagine dalla directory caricata, la invia al server TinyPNG per la compressione e, dopo aver ricevuto una risposta, memorizza l’immagine compressa nella stessa directory.

Questo processo viene eseguito in background. Non devi preoccuparti di come l’immagine sta andando al server TinyPNG, come riceve la risposta API. La libreria TinyPNG fa tutti i compiti per te.

Prova a caricare l’immagine ora e dovresti vedere la tua immagine compressa.

Comprimi le immagini usando reSmush.it in Laravel

TinyPNG funziona bene ma ha un limite all’ottimizzazione di 500 immagini gratuite al mese. Se vuoi comprimere più di 500 immagini, devi pagarle. In alternativa, gli utenti possono scegliere un servizio gratuito di reSmush.it per la compressione delle immagini. Al momento della stesura di questo articolo, reSmush.it comprime più di 7 miliardi di immagini. Questo è abbastanza da dire sulla popolarità di questo servizio.

Quindi, scrivi il codice sotto il quale comprime le immagini usando reSmush.it in Laravel.

//Compress Image Code Here
$filepath = public_path('storage/profile_images/'.$filenametostore);
$mime = mime_content_type($filepath);
$output = new CURLFile($filepath, $mime, $filenametostore);
$data = ["files" => $output];
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://api.resmush.it/?qlty=80');
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
if (curl_errno($ch)) {
    $result = curl_error($ch);
}
curl_close ($ch);
 
$arr_result = json_decode($result);
 
// store the optimized version of the image
$ch = curl_init($arr_result->dest);
$fp = fopen($filepath, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);

Ho superato il valore di qualità come 80 ?qlty=80nel codice sopra. Puoi giocare con il passaggio di diversi valori di qualità.

Spero che tu capisca come caricare e comprimere le immagini in Laravel. Mi piacerebbe sentire 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