{"id":28556,"date":"2021-05-27T12:14:00","date_gmt":"2021-05-27T09:14:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28556"},"modified":"2021-10-18T03:41:41","modified_gmt":"2021-10-18T00:41:41","slug":"przeslij-i-zmien-rozmiar-wielu-obrazow-w-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/przeslij-i-zmien-rozmiar-wielu-obrazow-w-laravel\/","title":{"rendered":"Prze\u015blij i zmie\u0144 rozmiar wielu obraz\u00f3w w Laravel"},"content":{"rendered":"<p>Opr\u00f3cz tego bloga prowadz\u0119 <a href=\"https:\/\/www.youtube.com\/channel\/UCosi8Kv8-EPLt5TBJLlsWJA\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kana\u0142 na YouTube, na<\/a> kt\u00f3rym udost\u0119pniam samouczki wideo. Ostatnio jeden z subskrybent\u00f3w kana\u0142u YouTube zapyta\u0142 o zmian\u0119 rozmiaru wielu obraz\u00f3w w Laravelu. Chc\u0105 zmieni\u0107 rozmiar wielu obraz\u00f3w za jednym razem. W tym artykule dowiemy si\u0119, jak przesy\u0142a\u0107 i zmienia\u0107 rozmiar wielu obraz\u00f3w w Laravel.<\/p>\n<p><a href=\"https:\/\/image.intervention.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Intervention Image<\/a> to biblioteka open source, kt\u00f3ra pozwala nam manipulowa\u0107 obrazami. Zamierzam u\u017cy\u0107 tej biblioteki do zmiany rozmiaru obraz\u00f3w.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20446-6081f2f1b1c63.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20446-6081f2f1b1c63.png\" alt=\"Prze\u015blij i zmie\u0144 rozmiar wielu obraz\u00f3w w Laravel\" ><\/a><\/p>\n<h3>Pierwsze kroki<\/h3>\n<p>Aby osi\u0105gn\u0105\u0107 nasz cel, musisz zainstalowa\u0107 i skonfigurowa\u0107 bibliotek\u0119 Intervention Image w projekcie Laravel. Otw\u00f3rz terminal w katalogu g\u0142\u00f3wnym projektu i uruchom 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 dostawc\u00f3w us\u0142ug, w nim fasad\u0119. Dodaj dostawc\u00f3w us\u0142ug dla tego pakietu do <code>$providers<\/code>tablicy.<\/p>\n<pre><code>InterventionImageImageServiceProvider::class,<\/code><\/pre>\n<p>Dodaj fasad\u0119 do <code>$aliases<\/code>szyku.<\/p>\n<pre><code>'Image' =&gt; InterventionImageFacadesImage::class,<\/code><\/pre>\n<p>Nast\u0119pnie potrzebujemy katalogu, w kt\u00f3rym przechowujemy przes\u0142ane pliki. <a href=\"https:\/\/laravel.com\/docs\/master\/filesystem\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Filesystem<\/a> udost\u0119pnia publiczny dysk do przechowywania plik\u00f3w. Dysk publiczny zawiera pliki, kt\u00f3re s\u0105 publicznie dost\u0119pne. Przes\u0142ane pliki znajdziesz w <code>storage\/app\/public<\/code>folderze. Aby uzyska\u0107 dost\u0119p do tych plik\u00f3w w sieci, musisz utworzy\u0107 dowi\u0105zanie symboliczne od <code>public\/storage<\/code>do <code>storage\/app\/public<\/code>.<\/p>\n<p>Utw\u00f3rz dowi\u0105zanie symboliczne za pomoc\u0105 polecenia:<\/p>\n<pre><code>php artisan storage:link<\/code><\/pre>\n<p>To polecenie utworzy folder przechowywania w katalogu publicznym. Tutaj przechowujemy nasze pliki.<\/p>\n<h3>Prze\u015blij i zmie\u0144 rozmiar obraz\u00f3w w Laravel<\/h3>\n<p>Aby przes\u0142a\u0107 pliki na serwer, potrzebujesz formularza. Stw\u00f3rzmy formularz, w kt\u00f3rym mo\u017cesz wybra\u0107 wiele plik\u00f3w do przes\u0142ania na serwer. Poni\u017cej znajduje si\u0119 przyk\u0142adowy kod formularza, kt\u00f3ry zostanie umieszczony w pliku widoku.<\/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\" multiple \/&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>W formularzu wzi\u0105\u0142em nazw\u0119 pliku wej\u015bciowego jako \u201eprofile_image[]&quot;, kt\u00f3ra wysy\u0142a tablic\u0119 plik\u00f3w do serwera. Doda\u0142em r\u00f3wnie\u017c atrybut \u201ewiele&#8221;, kt\u00f3ry pozwala nam wybra\u0107 wiele plik\u00f3w. Zast\u0105p symbol zast\u0119pczy ROUTE_URL rzeczywist\u0105 warto\u015bci\u0105.<\/p>\n<p>Poniewa\u017c musimy wgra\u0107 i zmieni\u0107 rozmiar obraz\u00f3w, w kontrolerze dodaj dwie fasady w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse Image; \/\/Intervention Image\nuse IlluminateSupportFacadesStorage; \/\/Laravel Filesystem\n\u00a0\nclass ImageController extends Controller\n{\n\u00a0\n}<\/code><\/pre>\n<p>Dodaj\u0105c fasad\u0119, mo\u017cesz wywo\u0142a\u0107 funkcje zmiany rozmiaru biblioteki obraz\u00f3w interwencyjnych. W poni\u017cszym kodzie wrzuc\u0119 pliki w dw\u00f3ch miejscach. Jednym z nich jest oryginalny obraz. Drugi znajduje si\u0119 pod katalogiem miniatur. Najpierw przesy\u0142amy oryginalny obraz do folderu miniatur, a nast\u0119pnie zmieniamy jego rozmiar.<\/p>\n<pre><code>public function store(Request $request)\n{\n\u00a0\u00a0\u00a0\u00a0if ($request-&gt;hasFile('profile_image')) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0foreach($request-&gt;file('profile_image') as $file){\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename with extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenamewithextension = $file-&gt;getClientOriginalName();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename without extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get file extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$extension = $file-&gt;getClientOriginalExtension();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/filename to store\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenametostore = $filename.'_'.uniqid().'.'.$extension;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Storage::put('public\/profile_images\/'. $filenametostore, fopen($file, 'r+'));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Storage::put('public\/profile_images\/thumbnail\/'. $filenametostore, fopen($file, 'r+'));\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/Resize image here\n\u00a0\u00a0\u00a0\u00a0\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\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\u00a0\u00a0\u00a0\u00a0$constraint-&gt;aspectRatio();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$img-&gt;save($thumbnailpath);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return redirect('ROUTE_URL')-&gt;with('success', \"Image uploaded successfully.\");\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Tutaj proporcjonalnie zmieniamy rozmiar obrazu. W ten spos\u00f3b zachowujemy proporcje, a obraz nie zostanie obci\u0119ty. Podaj\u0119 szeroko\u015b\u0107 jako 400 i wysoko\u015b\u0107 jako 150. Mo\u017cesz zmieni\u0107 te warto\u015bci zgodnie z wymaganiami.<\/p>\n<p>\u015amia\u0142o i przetestuj to. Otrzymasz wersj\u0119 zmiany rozmiaru przes\u0142anych obraz\u00f3w w katalogu \u201estorage\/profile_images\/thumbnail&#8221;.<\/p>\n<p>Je\u015bli szukasz twardej uprawy, zamie\u0144 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>Mam nadziej\u0119, \u017ce rozumiesz, jak przesy\u0142a\u0107 i zmienia\u0107 rozmiar wielu obraz\u00f3w w Laravel. 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\/jak-przeslac-plik-do-s3-za-pomoca-systemu-plikow-laravel\/\" title=\"Jak przes\u0142a\u0107 plik do S3 za pomoc\u0105 systemu plik\u00f3w Laravel?\">Jak przes\u0142a\u0107 plik do S3 za pomoc\u0105 systemu plik\u00f3w Laravel?<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-wykonac-kopie-zapasowa-aplikacji-laravel\/\" title=\"Jak wykona\u0107 kopi\u0119 zapasow\u0105 aplikacji Laravel\">Jak wykona\u0107 kopi\u0119 zapasow\u0105 aplikacji Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-zintegrowac-biuletyn-mailchimp-z-aplikacja-laravel\/\" title=\"Jak zintegrowa\u0107 biuletyn MailChimp z aplikacj\u0105 Laravel?\">Jak zintegrowa\u0107 biuletyn MailChimp z aplikacj\u0105 Laravel?<\/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>Szukasz sposobu przesy\u0142ania i zmiany rozmiaru wielu obraz\u00f3w w Laravel? W tym artykule pokazujemy, jak wykona\u0107 to zadanie za pomoc\u0105 Intervention Image<\/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-28556","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\/28556","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=28556"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28556\/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=28556"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=28556"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=28556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}