✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Ladda upp och ändra storlek på flera bilder i Laravel

25

Förutom den här bloggen driver jag en YouTube-kanal där jag delar videotutorialerna. Nyligen frågade en av YouTube-kanalprenumeranterna om att ändra storlek på flera bilder i Laravel. De vill ändra storlek på flera bilder på en gång. I den här artikeln studerar vi hur man laddar upp och ändrar storlek på flera bilder i Laravel.

Intervention Image är ett bibliotek med öppen källkod som låter oss manipulera bilder. Jag ska använda detta bibliotek för att ändra storlek på bilder.

Ladda upp och ändra storlek på flera bilder i Laravel

Komma igång

För att nå vårt mål måste du installera och konfigurera Intervention Image-biblioteket i Laravel-projektet. Öppna terminalen i din projektkatalog och kör kommandot:

composer require intervention/image

När biblioteket är installerat öppnar du config/app.phpfilen och lägger till tjänsteleverantörer, fasad i den. Lägg till tjänsteleverantörerna för detta paket i $providersmatrisen.

InterventionImageImageServiceProvider::class,

Lägg till fasaden i $aliasesmatrisen.

'Image' => InterventionImageFacadesImage::class,

Därefter behöver vi en katalog där vi lagrar våra uppladdade filer. Laravel Filesystem tillhandahåller en offentlig disk för att lagra filerna. Den offentliga disken innehåller filer som är offentligt tillgängliga. Du hittar de uppladdade filerna i storage/app/publicmappen. För att komma åt dessa filer på webben måste du skapa en symbolisk länk från public/storagetill storage/app/public.

Skapa en symbolisk länk med kommandot:

php artisan storage:link

Detta kommando skulle skapa en lagringsmapp under den offentliga katalogen. Det är här vi lagrar våra filer.

Ladda upp och ändra storlek på bilder i Laravel

För att ladda upp filer på en server behöver du ett formulär. Låt oss skapa ett formulär där du kan välja flera filer att ladda upp på en server. Nedan följer en exempelkod av formuläret som kommer att finnas i din vyfil.

<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>

I formuläret har jag tagit ett filinmatningsnamn som ‘profile_image []’ som skickar en rad filer till servern. Jag lade också till ett attribut ‘multipel’ som låter oss välja flera filer. Ersätt platshållaren ROUTE_URL med ditt faktiska värde.

Eftersom vi behöver ladda upp och ändra storlek på bilderna, lägg till två fasader i kontrollen enligt följande.

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

Genom att lägga till fasaden kan du ange storleksfunktionerna i Intervention Image-biblioteket. I koden nedan laddar jag upp filerna på två platser. En är originalbilden. Den andra finns under miniatyrkatalogen. Vi laddar först upp originalbilden i miniatyrmappen och ändrar sedan storlek på den.

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.");
    }
}

Här ändrar vi storleken på bilden proportionellt. Genom att göra det behåller vi bildförhållandet och bilden skärs inte av. Jag passerar bredden som 400 och höjden som 150. Du kan ändra dessa värden enligt dina krav.

Fortsätt och testa det. Du kommer att få storleksversionen av uppladdade bilder i katalogen ‘lagring / profil_bilder / miniatyrbild’.

Om du letar efter hård skörd, byt ut nedanför raderna

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

Med

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

Jag hoppas att du förstår hur du laddar upp och ändrar storlek på flera bilder i Laravel. Dela dina tankar och förslag i kommentarsektionen nedan.

relaterade artiklar

Inspelningskälla: artisansweb.net

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer