{"id":25397,"date":"2021-05-31T15:43:00","date_gmt":"2021-05-31T12:43:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=25397"},"modified":"2021-10-18T03:06:44","modified_gmt":"2021-10-18T00:06:44","slug":"come-caricare-e-comprimere-immagini-in-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/it\/come-caricare-e-comprimere-immagini-in-laravel\/","title":{"rendered":"Come caricare e comprimere immagini in Laravel"},"content":{"rendered":"<p>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 \u00e8 una buona pratica. In questo articolo, ti mostro come caricare e comprimere le immagini in Laravel.<\/p>\n<h3>Perch\u00e9 \u00e8 necessario comprimere le immagini?<\/h3>\n<p>Le immagini giocano un ruolo importante nel tuo sito web. Le immagini aggiungono una migliore UX e un&#8217;esperienza accattivante per i visitatori. Ma allo stesso tempo, pu\u00f2 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\u00f9 tempo per caricarsi, \u00e8 molto probabile che tu perda il tuo pubblico. Il tempo di caricamento standard per un sito Web \u00e8 di 2 secondi. Dovresti fare in modo che il tuo sito si carichi entro 2 secondi.<\/p>\n<p>Sebbene ci siano diversi fattori che devono essere presi in considerazione per migliorare la velocit\u00e0 della pagina, uno di questi \u00e8 l&#8217;uso di immagini ottimizzate. La compressione delle immagini riduce le dimensioni dell&#8217;immagine originale senza perderne la qualit\u00e0. Aiuta ad aumentare la velocit\u00e0 del sito.<\/p>\n<p>Detto questo, vediamo come caricare e comprimere le immagini in Laravel.<\/p>\n<h3>Caricamento di immagini in Laravel<\/h3>\n<p>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.<\/p>\n<pre><code>php artisan storage:link<\/code><\/pre>\n<p>Questo comando crea una directory di &quot;archiviazione&quot; nella cartella &quot;pubblica&quot;.<\/p>\n<p>Quindi, crea un modulo con l&#8217;input del file e il pulsante di invio aggiungendo il codice seguente nel file blade.<\/p>\n<pre><code>&lt;form action=\"{{ url('ROUTE_HERE') }}\" method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label for=\"exampleInputFile\"&gt;File input&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" name=\"profile_image\" id=\"exampleInputFile\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0{{ csrf_field() }}\n\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\" class=\"btn btn-default\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Nell&#8217;HTML sopra, ho aggiunto un file di input con il nome &#8216;profile_image&#8217;. Ho anche aggiunto <code>{{ csrf_field() }}<\/code>che \u00e8 necessario per inviare i moduli Laravel.<\/p>\n<p>Ora, supponendo che tu invii la richiesta di post al <code>store()<\/code>metodo del tuo controller, scrivi un codice che memorizzi l&#8217;immagine sul server come di seguito.<\/p>\n<pre><code>public function store(Request $request)\n{\n\u00a0\u00a0\u00a0\u00a0if($request-&gt;hasFile('profile_image')) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename with extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenamewithextension = $request-&gt;file('profile_image')-&gt;getClientOriginalName();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename without extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get file extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$extension = $request-&gt;file('profile_image')-&gt;getClientOriginalExtension();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/filename to store\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenametostore = $filename.'_'.time().'.'.$extension;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/Upload File\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$request-&gt;file('profile_image')-&gt;storeAs('public\/profile_images', $filenametostore);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/Compress Image Code Here\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return redirect('ROUTE_HERE')-&gt;with('success', \"Image uploaded successfully.\");\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Questo codice crea un nome file univoco e memorizza il file nella directory &#8216;profile_images&#8217;. Laravel genera automaticamente una directory &#8216;profile_images&#8217; in &#8216;public\/storage&#8217; se non esiste.<\/p>\n<p>Come detto prima, \u00e8 una pratica migliore ottimizzare l&#8217;immagine al momento del caricamento. Abbiamo finito con il codice di caricamento di un&#8217;immagine. Ora dobbiamo comprimerlo. <a href=\"https:\/\/tinypng.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Tratter\u00f2<\/a> 2 servizi: <a href=\"https:\/\/tinypng.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">TinyPNG<\/a> e <a href=\"https:\/\/resmush.it\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">reSmush.it<\/a> che fornisce le API per comprimere le immagini al volo. Vediamoli uno per uno.<\/p>\n<h3>Comprimi le immagini usando TinyPNG in Laravel<\/h3>\n<p>Per comprimere le immagini usando TinyPNG API devi ottenere la tua <a href=\"https:\/\/tinypng.com\/developers\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">chiave API<\/a>. Il processo \u00e8 diretto. Registra il tuo indirizzo e-mail con loro e ti invieranno la chiave sviluppatore.<\/p>\n<p>Una volta ottenuta la chiave API, aggiungila nel <code>.env<\/code>file.<\/p>\n<p>Successivamente, installa un pacchetto TinyPNG usando il comando:<\/p>\n<pre><code>composer require tinify\/tinify<\/code><\/pre>\n<p>Al momento dell&#8217;installazione del pacchetto, dobbiamo scrivere un codice che comprima l&#8217;immagine caricata utilizzando TinyPNG.<\/p>\n<p>Scrivi un codice di compressione appena sotto la riga che carica l&#8217;immagine.<\/p>\n<pre><code>\/\/Compress Image Code Here\n$filepath = public_path('storage\/profile_images\/'.$filenametostore);\n\u00a0\ntry {\n\u00a0\u00a0\u00a0\u00a0TinifysetKey(env(\"TINIFY_API_KEY\"));\n\u00a0\u00a0\u00a0\u00a0$source = TinifyfromFile($filepath);\n\u00a0\u00a0\u00a0\u00a0$source-&gt;toFile($filepath);\n} catch(TinifyAccountException $e) {\n\u00a0\u00a0\u00a0\u00a0\/\/ Verify your API key and account limit.\n\u00a0\u00a0\u00a0\u00a0return redirect('ROUTE_HERE')-&gt;with('error', $e-&gt;getMessage());\n} catch(TinifyClientException $e) {\n\u00a0\u00a0\u00a0\u00a0\/\/ Check your source image and request options.\n\u00a0\u00a0\u00a0\u00a0return redirect('ROUTE_HERE')-&gt;with('error', $e-&gt;getMessage());\n} catch(TinifyServerException $e) {\n\u00a0\u00a0\u00a0\u00a0\/\/ Temporary issue with the Tinify API.\n\u00a0\u00a0\u00a0\u00a0return redirect('ROUTE_HERE')-&gt;with('error', $e-&gt;getMessage());\n} catch(TinifyConnectionException $e) {\n\u00a0\u00a0\u00a0\u00a0\/\/ A network connection error occurred.\n\u00a0\u00a0\u00a0\u00a0return redirect('ROUTE_HERE')-&gt;with('error', $e-&gt;getMessage());\n} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\/\/ Something else went wrong, unrelated to the Tinify API.\n\u00a0\u00a0\u00a0\u00a0return redirect('ROUTE_HERE')-&gt;with('error', $e-&gt;getMessage());\n}<\/code><\/pre>\n<p>Il codice precedente prende un&#8217;immagine dalla directory caricata, la invia al server TinyPNG per la compressione e, dopo aver ricevuto una risposta, memorizza l&#8217;immagine compressa nella stessa directory.<\/p>\n<p>Questo processo viene eseguito in background. Non devi preoccuparti di come l&#8217;immagine sta andando al server TinyPNG, come riceve la risposta API. La libreria TinyPNG fa tutti i compiti per te.<\/p>\n<p>Prova a caricare l&#8217;immagine ora e dovresti vedere la tua immagine compressa.<\/p>\n<h3>Comprimi le immagini usando reSmush.it in Laravel<\/h3>\n<p>TinyPNG funziona bene ma ha un limite all&#8217;ottimizzazione di 500 immagini gratuite al mese. Se vuoi comprimere pi\u00f9 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\u00f9 di 7 miliardi di immagini. Questo \u00e8 abbastanza da dire sulla popolarit\u00e0 di questo servizio.<\/p>\n<p>Quindi, scrivi il codice sotto il quale comprime le immagini usando reSmush.it in Laravel.<\/p>\n<pre><code>\/\/Compress Image Code Here\n$filepath = public_path('storage\/profile_images\/'.$filenametostore);\n$mime = mime_content_type($filepath);\n$output = new CURLFile($filepath, $mime, $filenametostore);\n$data = [\"files\" =&gt; $output];\n\u00a0\n$ch = curl_init();\ncurl_setopt($ch, CURLOPT_URL, 'http:\/\/api.resmush.it\/?qlty=80');\ncurl_setopt($ch, CURLOPT_POST,1);\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\ncurl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);\ncurl_setopt($ch, CURLOPT_POSTFIELDS, $data);\n$result = curl_exec($ch);\nif (curl_errno($ch)) {\n\u00a0\u00a0\u00a0\u00a0$result = curl_error($ch);\n}\ncurl_close ($ch);\n\u00a0\n$arr_result = json_decode($result);\n\u00a0\n\/\/ store the optimized version of the image\n$ch = curl_init($arr_result-&gt;dest);\n$fp = fopen($filepath, 'wb');\ncurl_setopt($ch, CURLOPT_FILE, $fp);\ncurl_setopt($ch, CURLOPT_HEADER, 0);\ncurl_exec($ch);\ncurl_close($ch);\nfclose($fp);<\/code><\/pre>\n<p>Ho superato il valore di qualit\u00e0 come 80 <code>?qlty=80<\/code>nel codice sopra. Puoi giocare con il passaggio di diversi valori di qualit\u00e0.<\/p>\n<p>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.<\/p>\n<h4>articoli Correlati<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/it\/tinypng-comprimi-le-immagini-usando-php\/\" title=\"TinyPNG Comprimi le immagini usando PHP\">TinyPNG Comprimi le immagini usando PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/it\/ottimizzazione-delle-immagini-utilizzando-il-pacchetto-di-ottimizzazione-delle-immagini-web-di-artigiani\/\" title=\"Ottimizzazione delle immagini utilizzando il pacchetto di ottimizzazione delle immagini\/web di artigiani\">Ottimizzazione delle immagini utilizzando il pacchetto di ottimizzazione delle immagini\/web di artigiani<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/it\/ridimensiona-l-immagine-in-php-usando-la-libreria-di-immagini-di-intervento\/\" title=\"Ridimensiona l&#039;immagine in PHP usando la libreria di immagini di intervento\">Ridimensiona l&#8217;immagine in PHP usando la libreria di immagini di intervento<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Studiamo come caricare e comprimere le immagini in Laravel. Usiamo la libreria TinyPNG per comprimere le immagini caricate. In questo modo possiamo migliorare<\/p>\n","protected":false},"author":1,"featured_media":21621,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[208,500],"tags":[846],"class_list":["post-25397","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-elementor-7","category-laravel","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts\/25397","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/comments?post=25397"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts\/25397\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/media\/21621"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/media?parent=25397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/categories?post=25397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/tags?post=25397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}