{"id":28228,"date":"2021-05-22T10:40:00","date_gmt":"2021-05-22T07:40:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28228"},"modified":"2021-10-18T03:43:05","modified_gmt":"2021-10-18T00:43:05","slug":"zmien-rozmiar-obrazu-w-laravel-za-pomoca-biblioteki-obrazow-interwencyjnych","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/zmien-rozmiar-obrazu-w-laravel-za-pomoca-biblioteki-obrazow-interwencyjnych\/","title":{"rendered":"Zmie\u0144 rozmiar obrazu w Laravel za pomoc\u0105 biblioteki obraz\u00f3w interwencyjnych"},"content":{"rendered":"<p>Ostatnio jeden z naszych czytelnik\u00f3w zapyta\u0142, jak zmieni\u0107 rozmiar obrazu w Laravelu. Zmiana rozmiaru obrazu to regularne zadanie dla programist\u00f3w. Deweloperzy powinni to zrobi\u0107 poprawnie. Dobr\u0105 praktyk\u0105 jest zmiana rozmiaru obraz\u00f3w zgodnie z rozmiarem kontenera. Pomaga poprawi\u0107 szybko\u015b\u0107 strony. W tym artykule dowiemy si\u0119, jak zmieni\u0107 rozmiar obrazu w Laravel za pomoc\u0105 biblioteki obraz\u00f3w interwencyjnych.<\/p>\n<p><a href=\"http:\/\/image.intervention.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Interwencja<\/a> Biblioteka <a href=\"http:\/\/image.intervention.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">obraz\u00f3w<\/a> zapewnia \u0142atwy spos\u00f3b zmiany rozmiaru obraz\u00f3w. Ta biblioteka wykorzystuje GD Library i Imagick do manipulacji obrazami pod mask\u0105.<\/p>\n<h3>Dlaczego nale\u017cy zmienia\u0107 rozmiar obraz\u00f3w?<\/h3>\n<p>We\u017amy na przyk\u0142ad galeri\u0119. Podczas pracy nad galeri\u0105 zwykle wy\u015bwietlamy ma\u0142\u0105 miniatur\u0119 na li\u015bcie. Gdy kto\u015b kliknie miniatur\u0119, poka\u017cemy oryginalny obraz. Tutaj miniatury s\u0105 zmienion\u0105 wersj\u0105 oryginalnego obrazu.<\/p>\n<p>Za\u0142\u00f3\u017cmy, \u017ce rozmiar oryginalnego obrazu to 500 500, a rozmiar kontenera miniatur to 200 200. W takim przypadku nale\u017cy zmieni\u0107 rozmiar oryginalnego obrazu zgodnie z rozmiarem kontenera miniatury. U\u017cywanie obrazu o du\u017cym rozmiarze w ma\u0142ym pojemniku to z\u0142a praktyka. Wp\u0142ywa na wydajno\u015b\u0107 strony.<\/p>\n<p>To jeden z przyk\u0142ad\u00f3w, dlaczego powinni\u015bmy zmieni\u0107 rozmiar obraz\u00f3w. Jest te\u017c wiele innych. Powiedziawszy to, przyjrzyjmy si\u0119, jak zmieni\u0107 rozmiar obrazu w Laravel za pomoc\u0105 biblioteki obraz\u00f3w interwencyjnych.<\/p>\n<h3>Instalacja<\/h3>\n<p>Aby rozpocz\u0105\u0107, musisz zainstalowa\u0107 bibliotek\u0119 Intervention Image w swoim projekcie Laravel. Powiniene\u015b mie\u0107 zainstalowany <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a> w swoim systemie. Otw\u00f3rz terminal w katalogu g\u0142\u00f3wnym projektu i uruchom poni\u017csze polecenie:<\/p>\n<pre><code>composer require intervention\/image<\/code><\/pre>\n<p>Po zainstalowaniu biblioteki otw\u00f3rz <code>config\/app.php<\/code>plik i dodaj do niego nast\u0119puj\u0105ce wiersze.<\/p>\n<p>Dodaj dostawc\u0119 us\u0142ug tego pakietu do <code>$providers<\/code>tablicy.<\/p>\n<pre><code>InterventionImageImageServiceProvider::class<\/code><\/pre>\n<p>Nast\u0119pnie dodaj fasad\u0119 do <code>$aliases<\/code>tablicy.<\/p>\n<pre><code>'Image' =&gt; InterventionImageFacadesImage::class<\/code><\/pre>\n<h3>Zmie\u0144 rozmiar obrazu w Laravel<\/h3>\n<p>Aby zmieni\u0107 rozmiar obrazu, musimy najpierw napisa\u0107 kod do za\u0142adowania obrazu. Wi\u0119c najpierw utw\u00f3rz katalog, w kt\u00f3rym b\u0119dziemy przechowywa\u0107 obrazy. Udaj si\u0119 do terminala i uruchom polecenie:<\/p>\n<pre><code>php artisan storage:link<\/code><\/pre>\n<p>To polecenie tworzy katalog \u201estorage&quot; w folderze \u201epublic&#8221;. W folderze \u201estorage&#8221; b\u0119dziemy przechowywa\u0107 pe\u0142n\u0105 i miniaturow\u0105 wersj\u0119 obraz\u00f3w.<\/p>\n<p>Nast\u0119pnie utw\u00f3rz formularz w pliku widoku. Dodaj\u0119 r\u00f3wnie\u017c kod do wiadomo\u015bci o sukcesie w pliku ostrza.<\/p>\n<pre><code>@if (session('success'))\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"alert alert-success\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{{ session('success') }}\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n@endif\n&lt;form action=\"{{ url('PASS_ACTION_URL') }}\" 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>Zast\u0105p symbol zast\u0119pczy \u201ePASS_ACTION_URL&#8221; swoj\u0105 tras\u0105.<\/p>\n<p>W kontrolerze nale\u017cy doda\u0107 fasad\u0119 'Image&#8217; biblioteki, kt\u00f3r\u0105 dodali\u015bmy w <code>config\/app.php<\/code>pliku.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse Image;\n\u00a0\nclass ImageController extends Controller\n{\n\u00a0\n}<\/code><\/pre>\n<p>Dodaj\u0105c fasad\u0119 jeste\u015bmy w stanie wywo\u0142a\u0107 funkcje biblioteki obraz\u00f3w interwencyjnych. W poni\u017cszym kodzie wrzuc\u0119 obrazek w dw\u00f3ch miejscach. Jednym z nich jest oryginalny obraz w folderze \u201eprofile_images&#8221;. Drugi znajduje si\u0119 w katalogu 'profile_images\/thumbnail&#8217;. Najpierw prze\u015bl\u0119 oryginalny obraz do folderu miniatur, a nast\u0119pnie zmieni\u0119 jego rozmiar.<\/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\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$request-&gt;file('profile_image')-&gt;storeAs('public\/profile_images\/thumbnail', $filenametostore);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/Resize image here\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$thumbnailpath = public_path('storage\/profile_images\/thumbnail\/'.$filenametostore);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$img = Image::make($thumbnailpath)-&gt;resize(400, 150, function($constraint) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$constraint-&gt;aspectRatio();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$img-&gt;save($thumbnailpath);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return redirect('image')-&gt;with('success', \"Image uploaded successfully.\"); \/\/change the route as per your flow\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Tutaj zmieniam rozmiar obrazu proporcjonalnie. W ten spos\u00f3b zachowasz proporcje, a obraz nie zostanie obci\u0119ty. Przekaza\u0142em szeroko\u015b\u0107 jako 400 i wysoko\u015b\u0107 jako 150. Mo\u017cesz zmieni\u0107 te warto\u015bci zgodnie z wymaganiami.<\/p>\n<p>Je\u015bli szukasz mocnego przycinania, zast\u0105p poni\u017csze linie<\/p>\n<pre><code>$img = Image::make($thumbnailpath)-&gt;resize(400, 150, function($constraint) {\n\u00a0\u00a0\u00a0\u00a0$constraint-&gt;aspectRatio();\n});\n$img-&gt;save($thumbnailpath);<\/code><\/pre>\n<p>Z<\/p>\n<pre><code>$img = Image::make($thumbnailpath)-&gt;resize(100, 100)-&gt;save($thumbnailpath);<\/code><\/pre>\n<p>Nast\u0119pnie otrzymasz miniatur\u0119 o wymiarze 100*100.<\/p>\n<p>Mam nadziej\u0119, \u017ce mo\u017cesz dowiedzie\u0107 si\u0119 o zmianie rozmiaru obrazu w Laravel za pomoc\u0105 biblioteki obraz\u00f3w interwencyjnych. Podziel si\u0119 swoimi przemy\u015bleniami i sugestiami w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/optymalizacja-obrazu-za-pomoca-pakietu-artisansweb-image-optimizer\/\" title=\"Optymalizacja obrazu za pomoc\u0105 pakietu artisansweb\/image-optimizer\">Optymalizacja obrazu za pomoc\u0105 pakietu artisansweb\/image-optimizer<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-przesylac-i-kompresowac-obrazy-w-laravel\/\" title=\"Przewodnik po przesy\u0142aniu i kompresowaniu obraz\u00f3w w Laravel\">Przewodnik po przesy\u0142aniu i kompresowaniu obraz\u00f3w w Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/zmien-rozmiar-obrazu-w-php-za-pomoca-tinypng\/\" title=\"Zmie\u0144 rozmiar obrazu w PHP za pomoc\u0105 TinyPNG\">Zmie\u0144 rozmiar obrazu w PHP za pomoc\u0105 TinyPNG<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Czy chcesz zmieni\u0107 rozmiar obrazu w Laravel? W tym artykule dowiemy si\u0119, jak zmieni\u0107 rozmiar obrazu w Laravel za pomoc\u0105 biblioteki obraz\u00f3w interwencyjnych. Zmiana rozmiaru obrazu<\/p>\n","protected":false},"author":1,"featured_media":21676,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[501],"tags":[847],"class_list":["post-28228","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=28228"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28228\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/21676"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=28228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=28228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=28228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}