✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Prześlij i zmień rozmiar wielu obrazów w Laravel

29

Oprócz tego bloga prowadzę kanał na YouTube, na którym udostępniam samouczki wideo. Ostatnio jeden z subskrybentów kanału YouTube zapytał o zmianę rozmiaru wielu obrazów w Laravelu. Chcą zmienić rozmiar wielu obrazów za jednym razem. W tym artykule dowiemy się, jak przesyłać i zmieniać rozmiar wielu obrazów w Laravel.

Intervention Image to biblioteka open source, która pozwala nam manipulować obrazami. Zamierzam użyć tej biblioteki do zmiany rozmiaru obrazów.

Prześlij i zmień rozmiar wielu obrazów w Laravel

Pierwsze kroki

Aby osiągnąć nasz cel, musisz zainstalować i skonfigurować bibliotekę Intervention Image w projekcie Laravel. Otwórz terminal w katalogu głównym projektu i uruchom polecenie:

composer require intervention/image

Po zainstalowaniu biblioteki otwórz config/app.phpplik i dodaj dostawców usług, w nim fasadę. Dodaj dostawców usług dla tego pakietu do $providerstablicy.

InterventionImageImageServiceProvider::class,

Dodaj fasadę do $aliasesszyku.

'Image' => InterventionImageFacadesImage::class,

Następnie potrzebujemy katalogu, w którym przechowujemy przesłane pliki. Laravel Filesystem udostępnia publiczny dysk do przechowywania plików. Dysk publiczny zawiera pliki, które są publicznie dostępne. Przesłane pliki znajdziesz w storage/app/publicfolderze. Aby uzyskać dostęp do tych plików w sieci, musisz utworzyć dowiązanie symboliczne od public/storagedo storage/app/public.

Utwórz dowiązanie symboliczne za pomocą polecenia:

php artisan storage:link

To polecenie utworzy folder przechowywania w katalogu publicznym. Tutaj przechowujemy nasze pliki.

Prześlij i zmień rozmiar obrazów w Laravel

Aby przesłać pliki na serwer, potrzebujesz formularza. Stwórzmy formularz, w którym możesz wybrać wiele plików do przesłania na serwer. Poniżej znajduje się przykładowy kod formularza, który zostanie umieszczony w pliku widoku.

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

W formularzu wziąłem nazwę pliku wejściowego jako „profile_image[]", która wysyła tablicę plików do serwera. Dodałem również atrybut „wiele”, który pozwala nam wybrać wiele plików. Zastąp symbol zastępczy ROUTE_URL rzeczywistą wartością.

Ponieważ musimy wgrać i zmienić rozmiar obrazów, w kontrolerze dodaj dwie fasady w następujący sposób.

<?php   namespace AppHttpControllers;   use IlluminateHttpRequest; use Image; //Intervention Image use IlluminateSupportFacadesStorage; //Laravel Filesystem   class ImageController extends Controller {   }

Dodając fasadę, możesz wywołać funkcje zmiany rozmiaru biblioteki obrazów interwencyjnych. W poniższym kodzie wrzucę pliki w dwóch miejscach. Jednym z nich jest oryginalny obraz. Drugi znajduje się pod katalogiem miniatur. Najpierw przesyłamy oryginalny obraz do folderu miniatur, a następnie zmieniamy jego rozmiar.

public function store(Request $request) {     if ($request->hasFile('profile_image')) {           foreach($request->file('profile_image') as $file){               //get filename with extension             $filenamewithextension = $file->getClientOriginalName();               //get filename without extension             $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);               //get file extension             $extension = $file->getClientOriginalExtension();               //filename to store             $filenametostore = $filename.'_'.uniqid().'.'.$extension;               Storage::put('public/profile_images/'. $filenametostore, fopen($file, 'r+'));             Storage::put('public/profile_images/thumbnail/'. $filenametostore, fopen($file, 'r+'));               //Resize image here             $thumbnailpath = public_path('storage/profile_images/thumbnail/'.$filenametostore);             $img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {                 $constraint->aspectRatio();             });             $img->save($thumbnailpath);         }           return redirect('ROUTE_URL')->with('success', "Image uploaded successfully.");     } }

Tutaj proporcjonalnie zmieniamy rozmiar obrazu. W ten sposób zachowujemy proporcje, a obraz nie zostanie obcięty. Podaję szerokość jako 400 i wysokość jako 150. Możesz zmienić te wartości zgodnie z wymaganiami.

Śmiało i przetestuj to. Otrzymasz wersję zmiany rozmiaru przesłanych obrazów w katalogu „storage/profile_images/thumbnail”.

Jeśli szukasz twardej uprawy, zamień poniższe linie

$img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {     $constraint->aspectRatio(); }); $img->save($thumbnailpath);

Z

$img = Image::make($thumbnailpath)->resize(100, 100)->save($thumbnailpath);

Mam nadzieję, że rozumiesz, jak przesyłać i zmieniać rozmiar wielu obrazów w Laravel. Podziel się swoimi przemyśleniami i sugestiami w sekcji komentarzy poniżej.

Powiązane artykuły

Źródło nagrywania: artisansweb.net

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów