Ändra storlek på bild i Laravel med hjälp av interventionsbildbibliotek
Nyligen frågade en av våra läsare hur man ändrar storlek på bilden i Laravel. Bildändring är en vanlig uppgift för utvecklare. Utvecklarna bör göra det korrekt. Det är en bra praxis att ändra storlek på bilderna enligt dess behållarstorlek. Det hjälper dig att förbättra sidhastigheten. I den här artikeln studerar vi hur man ändrar storlek på bilden i Laravel med hjälp av bildbiblioteket Intervention.
Intervention Bildbibliotek är ett enkelt sätt att ändra storlek på bilderna. Detta bibliotek använder GD Library och Imagick för bildmanipulation under huven.
Varför ska du ändra storlek på bilder?
Ta exemplet på ett galleri. När vi arbetar på ett galleri visar vi normalt den lilla miniatyrbilden i listan. När någon klickar på miniatyrbilden visar vi en originalbild. Här är miniatyrerna den ändrade storleken på originalbilden.
Låt oss säga att din ursprungliga bildstorlek är 500 500 och din miniatyrbehållare har storlek 200 200. I det här fallet bör du ändra storlek på originalbilden enligt miniatyrens behållarstorlek. Att använda en storbildsbild i den lilla behållaren är en dålig praxis. Det påverkar webbplatsens prestanda.
Detta är ett exempel på varför vi ska ändra storlek på bilderna. Det finns också många andra. Med detta sagt, låt oss ta en titt på hur du ändrar storleken på bilden i Laravel med hjälp av Intervention Image Library.
Installation
För att komma igång måste du installera Intervention Image-biblioteket i ditt Laravel-projekt. Du bör ha Composer installerat på ditt system. Öppna terminalen i din projektkatalog och kör kommandot nedan:
composer require intervention/image
Efter att ha installerat biblioteket, öppna config/app.php
filen och lägg till följande rader i den.
Lägg till tjänsteleverantören för detta paket i $providers
matrisen.
InterventionImageImageServiceProvider::class
Lägg sedan till fasaden i $aliases
matrisen.
'Image' => InterventionImageFacadesImage::class
Ändra storlek på bild i Laravel
För att ändra storlek på bilden måste vi först skriva kod för att ladda upp en bild. Så skapa först en katalog där vi kommer att lagra bilderna. Gå över till terminalen och kör kommandot:
php artisan storage:link
Detta kommando skapar en "lagring" -katalog under "offentlig" -mappen. I mappen ‘lagring’ lagrar vi en fullständig och en miniatyrversion av bilderna.
Skapa sedan ett formulär i din vyfil. Jag lägger också till kod för framgångsmeddelandet i bladfilen.
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
<form action="{{ url('PASS_ACTION_URL') }}" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="exampleInputFile">File input</label>
<input type="file" name="profile_image" id="exampleInputFile">
</div>
{{ csrf_field() }}
<button type="submit" class="btn btn-default">Submit</button>
</form>
Ersätt platshållaren ‘PASS_ACTION_URL’ med din rutt.
I styrenheten är det nödvändigt att lägga till fasaden ‘Bild’ på ett bibliotek som vi har lagt till i config/app.php
filen.
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use Image;
class ImageController extends Controller
{
}
Genom att lägga till fasaden kan vi anropa funktioner i Intervention Image Library. I koden nedan laddar jag upp bilden på två ställen. Den ena är originalbilden under mappen ‘profile_images’. Den andra finns under katalogen ‘profile_images / thumbnail’. Jag laddar först upp originalbilden i miniatyrmappen och ändrar sedan storlek på den.
public function store(Request $request)
{
if($request->hasFile('profile_image')) {
//get filename with extension
$filenamewithextension = $request->file('profile_image')->getClientOriginalName();
//get filename without extension
$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
//get file extension
$extension = $request->file('profile_image')->getClientOriginalExtension();
//filename to store
$filenametostore = $filename.'_'.time().'.'.$extension;
//Upload File
$request->file('profile_image')->storeAs('public/profile_images', $filenametostore);
$request->file('profile_image')->storeAs('public/profile_images/thumbnail', $filenametostore);
//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('image')->with('success', "Image uploaded successfully."); //change the route as per your flow
}
}
Här ändrar jag storleken på bilden proportionellt. Om du gör det behåller du bildförhållandet och bilden skärs inte av. Jag har passerat bredden som 400 och höjden som 150. Du kan ändra dessa värden enligt dina krav.
Om du letar efter hård beskärning ersätter du nedanstående rader
$img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {
$constraint->aspectRatio();
});
$img->save($thumbnailpath);
Med
$img = Image::make($thumbnailpath)->resize(100, 100)->save($thumbnailpath);
Efter detta får du miniatyren med dimensionen 100 * 100.
Jag hoppas att du kan lära dig att ändra storlek på bilden i Laravel med hjälp av Intervention Image-biblioteket. Dela dina tankar och förslag i kommentarsektionen nedan.
relaterade artiklar
- Bildoptimering med hjälp av artisansweb / image-optimizer Package
- En guide för att ladda upp och komprimera bilder i Laravel
- Ändra storlek på bild i PHP med TinyPNG