✅ 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

16

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