{"id":28930,"date":"2021-05-31T15:48:00","date_gmt":"2021-05-31T12:48:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28930"},"modified":"2021-10-17T04:29:57","modified_gmt":"2021-10-17T01:29:57","slug":"hur-man-laddar-upp-och-komprimerar-bilder-i-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/sv\/hur-man-laddar-upp-och-komprimerar-bilder-i-laravel\/","title":{"rendered":"Hur man laddar upp och komprimerar bilder i Laravel"},"content":{"rendered":"<p>Letar du efter hur du laddar upp och komprimerar bilder i Laravel? Laravel \u00e4r ett enkelt s\u00e4tt f\u00f6r fil\u00f6verf\u00f6ring. Och att komprimera bilderna vid tidpunkten f\u00f6r uppladdningen \u00e4r en bra praxis. I den h\u00e4r artikeln visar jag dig hur du laddar upp och komprimerar bilder i Laravel.<\/p>\n<h3>Varf\u00f6r beh\u00f6ver du komprimera bilder?<\/h3>\n<p>Bilder spelar en viktig roll p\u00e5 din webbplats. Bilder ger b\u00e4ttre UX och i\u00f6gonfallande upplevelse f\u00f6r bes\u00f6karna. Men samtidigt kan det ocks\u00e5 d\u00f6da webbplatsens prestanda. Tunga bilder saktar ner webbplatsen. Som ett resultat tar det l\u00e5ng tid att ladda din webbplats. Anv\u00e4ndare gillar inte l\u00e5ngsamma webbplatser. Om det tar l\u00e4ngre tid att ladda din webbplats \u00e4r det en stor chans att du tappar din publik. Standard laddningstid f\u00f6r en webbplats \u00e4r 2 sekunder. Du b\u00f6r se till att din webbplats laddas inom tv\u00e5 sekunder.<\/p>\n<p>\u00c4ven om det finns flera faktorer som m\u00e5ste tas i beaktande f\u00f6r att f\u00f6rb\u00e4ttra sidhastigheten, \u00e4r en av dem anv\u00e4ndningen av optimerade bilder. Komprimering av bilder minskar storleken p\u00e5 din originalbild utan att f\u00f6rlora kvaliteten. Det hj\u00e4lper till att \u00f6ka webbplatsens hastighet.<\/p>\n<p>Med detta sagt, l\u00e5t oss se hur man laddar upp och komprimerar bilder i Laravel.<\/p>\n<h3>Ladda upp bilder i Laravel<\/h3>\n<p>Laravel ger ett rent s\u00e4tt att ladda upp bilderna. F\u00f6r att komma ig\u00e5ng med det m\u00e5ste vi f\u00f6rst skapa en katalog d\u00e4r vi kommer att lagra bilderna. \u00d6ppna kommandotolken i rotkatalogen och k\u00f6r kommandot nedan.<\/p>\n<pre><code>php artisan storage:link<\/code><\/pre>\n<p>Detta kommando skapar en &quot;lagring&quot; -katalog under &quot;offentlig&quot; -mappen.<\/p>\n<p>Skapa sedan ett formul\u00e4r med inmatnings- och skicka-knappen genom att l\u00e4gga till koden nedan i din bladfil.<\/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>I ovanst\u00e5ende HTML har jag lagt till en filinmatning med namnet &#8217;profile_image&#8217;. Jag har ocks\u00e5 lagt till <code>{{ csrf_field() }}<\/code>som kr\u00e4vs f\u00f6r att skicka Laravel-formul\u00e4r.<\/p>\n<p>Nu, f\u00f6rutsatt att du skickar postf\u00f6rfr\u00e5gan till din controllerns <code>store()<\/code>metod, skriv en kod som lagrar bilden p\u00e5 servern enligt nedan.<\/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>Den h\u00e4r koden skapar ett unikt filnamn och lagrar filen i katalogen &#8217;profile_images&#8217;. Laravel genererar automatiskt en &#8217;profile_images&#8217; -katalog under &#8217;public \/ storage&#8217; om den inte finns.<\/p>\n<p>Som sagt tidigare \u00e4r det b\u00e4ttre att optimera bilden vid uppladdningen. Vi \u00e4r klara med att ladda upp en bild. Nu m\u00e5ste vi komprimera det. Jag ska t\u00e4cka 2 tj\u00e4nster &#8211; <a href=\"https:\/\/tinypng.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">TinyPNG<\/a> och <a href=\"https:\/\/resmush.it\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">reSmush.it<\/a> som ger API: erna f\u00f6r att komprimera bilder i farten. L\u00e5t oss se dem en efter en.<\/p>\n<h3>Komprimera bilder med TinyPNG i Laravel<\/h3>\n<p>F\u00f6r att komprimera bilder med TinyPNG API m\u00e5ste du h\u00e4mta din <a href=\"https:\/\/tinypng.com\/developers\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">API-nyckel<\/a>. Processen \u00e4r enkel. Registrera din e-postadress med dem s\u00e5 skickar de din utvecklarnyckel.<\/p>\n<p>N\u00e4r du har f\u00e5tt API-nyckeln, l\u00e4gg till den i <code>.env<\/code>filen.<\/p>\n<p>Efter detta installerar du ett TinyPNG-paket med kommandot:<\/p>\n<pre><code>composer require tinify\/tinify<\/code><\/pre>\n<p>Vid installation av paket m\u00e5ste vi skriva en kod som komprimerar den uppladdade bilden med TinyPNG.<\/p>\n<p>Skriv en kompressionskod precis under raden som laddar upp bilden.<\/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>Ovanst\u00e5ende kod tar en bild fr\u00e5n den uppladdade katalogen, skickar den till TinyPNG-servern f\u00f6r komprimering, och efter att ha f\u00e5tt svar lagrar den komprimerade bilden i samma katalog.<\/p>\n<p>Denna process k\u00f6rs i bakgrunden. Du beh\u00f6ver inte oroa dig f\u00f6r hur bilden g\u00e5r till TinyPNG-servern, hur den f\u00e5r API-svaret. TinyPNG-biblioteket g\u00f6r alla uppgifter \u00e5t dig.<\/p>\n<p>F\u00f6rs\u00f6k att ladda upp bilden nu och du b\u00f6r se din bild komprimeras.<\/p>\n<h3>Komprimera bilder med reSmush.it i Laravel<\/h3>\n<p>TinyPNG fungerar bra men det har en begr\u00e4nsning att optimera 500 gratis bilder per m\u00e5nad. Om du vill komprimera mer \u00e4n 500 bilder m\u00e5ste du betala f\u00f6r dem. Alternativt kan anv\u00e4ndare v\u00e4lja en gratis tj\u00e4nst p\u00e5 reSmush.it f\u00f6r bildkomprimering. N\u00e4r denna artikel skrivs komprimerar reSmush.it mer \u00e4n 7 miljarder bilder. Detta r\u00e4cker f\u00f6r att s\u00e4ga om populariteten f\u00f6r denna tj\u00e4nst.<\/p>\n<p>S\u00e5 skriv koden nedan som komprimerar bilder med reSmush.it i 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>Jag har klarat kvalitetsv\u00e4rdet som 80 <code>?qlty=80<\/code>i ovanst\u00e5ende kod. Du kan spela med att passera olika kvalitetsv\u00e4rden.<\/p>\n<p>Jag hoppas att du f\u00f6rst\u00e5r hur du laddar upp och komprimerar bilder i Laravel. Jag skulle vilja h\u00f6ra dina tankar och f\u00f6rslag i kommentarsektionen nedan.<\/p>\n<h4>relaterade artiklar<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/tinypng-komprimera-bilder-med-php\/\" title=\"TinyPNG Komprimera bilder med PHP\">TinyPNG Komprimera bilder med PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/bildoptimering-med-hjalp-av-artisansweb-image-optimizer-package\/\" title=\"Bildoptimering med hj\u00e4lp av artisansweb \/ image-optimizer Package\">Bildoptimering med hj\u00e4lp av artisansweb \/ image-optimizer Package<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/andra-storlek-pa-bild-i-php-med-hjalp-av-interventionsbildbibliotek\/\" title=\"\u00c4ndra storlek p\u00e5 bild i PHP med hj\u00e4lp av interventionsbildbibliotek\">\u00c4ndra storlek p\u00e5 bild i PHP med hj\u00e4lp av interventionsbildbibliotek<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>L\u00e5t oss studera hur man laddar upp och komprimerar bilder i Laravel. Vi anv\u00e4nder TinyPNG-biblioteket f\u00f6r att komprimera de uppladdade bilderna. P\u00e5 det s\u00e4ttet kan vi f\u00f6rb\u00e4ttra<\/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":[211,503],"tags":[850],"class_list":["post-28930","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-elementor-10","category-laravel2-10","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/28930","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/comments?post=28930"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/28930\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media\/21621"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media?parent=28930"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/categories?post=28930"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/tags?post=28930"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}