Lataa ja muuta useita kuvia Laravelissa
Tämän blogin lisäksi käytän YouTube-kanavaa, jossa jaan video-oppaita. Äskettäin yksi YouTube-kanavan tilaajista kysyi useiden kuvien koon muuttamisesta Laravelissa. He haluavat muuttaa useita kuvia yhdellä kertaa. Tässä artikkelissa tutkitaan kuinka ladata useita kuvia Laravelissa ja muuttaa niiden kokoa.
Interventiokuva on avoimen lähdekoodin kirjasto, jonka avulla voimme käsitellä kuvia. Aion käyttää tätä kirjastoa kuvien koon muuttamiseen.
Päästä alkuun
Tavoitteen saavuttamiseksi sinun on asennettava ja määritettävä Intervention Image -kirjasto Laravel-projektiin. Avaa pääte projektin juurihakemistossa ja suorita komento:
composer require intervention/image
Kun kirjasto on asennettu, avaa config/app.php
tiedosto ja lisää palveluntarjoajat, julkisivu siihen. Lisää tämän paketin palveluntarjoajat $providers
ryhmään.
InterventionImageImageServiceProvider::class,
Lisää julkisivu $aliases
taulukkoon.
'Image' => InterventionImageFacadesImage::class,
Seuraavaksi tarvitsemme hakemiston, johon tallennamme lähetetyt tiedostot. Laravel Filesystem tarjoaa julkisen levyn tiedostojen tallentamiseen. Julkinen levy sisältää tiedostoja, jotka ovat julkisesti saatavilla. Löydät ladatut tiedostot storage/app/public
kansiosta. Voit käyttää näitä tiedostoja verkossa, sinun täytyy luoda symbolinen linkki public/storage
on storage/app/public
.
Luo symbolinen linkki komennolla:
php artisan storage:link
Tämä komento luo tallennuskansion julkiseen hakemistoon. Täällä tallennamme tiedostomme.
Lataa ja muuta kuvia Laravelissa
Tarvitset lomakkeen, jotta voit ladata tiedostoja palvelimelle. Luodaan lomake, josta voit valita useita tiedostoja lähetettäväksi palvelimelle. Alla on esimerkkikoodi lomakkeesta, joka menee näkymätiedostoon.
<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>
Lomakkeessa olen ottanut tiedoston syöttönimen nimellä "profile_image []", joka lähettää joukon tiedostoja palvelimelle. Lisäsin myös attribuutin ‘useita’, jonka avulla voimme valita useita tiedostoja. Korvaa paikkamerkki ROUTE_URL todellisella arvollasi.
Koska meidän on ladattava ja muutettava kuvien kokoa, lisää ohjaimeen kaksi julkisivua seuraavasti.
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use Image; //Intervention Image
use IlluminateSupportFacadesStorage; //Laravel Filesystem
class ImageController extends Controller
{
}
Lisäämällä julkisivun voit soittaa Intervention Image -kirjaston koon muutostoiminnot. Lähetän alla olevaan koodiin tiedostot kahteen paikkaan. Yksi on alkuperäinen kuva. Toinen on pikkukuvien hakemiston alla. Lähetämme alkuperäisen kuvan ensin pikkukansioon ja muutamme sen kokoa.
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.");
}
}
Tässä muutamme kuvan kokoa suhteellisesti. Näin pidämme kuvasuhteen ennallaan, eikä kuva leikkaa. Ohitan leveyden 400 ja korkeuden 150. Voit muuttaa näitä arvoja vaatimuksesi mukaan.
Mene eteenpäin ja testaa se. Saat ladattujen kuvien koon version hakemistosta ‘storage / profile_images / thumbnail’.
Jos etsit kovaa satoa, vaihda alla olevat viivat
$img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {
$constraint->aspectRatio();
});
$img->save($thumbnailpath);
Kanssa
$img = Image::make($thumbnailpath)->resize(100, 100)->save($thumbnailpath);
Toivon, että ymmärrät kuinka ladata ja muuttaa useita kuvia Laravelissa. Jaa ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.