Erstellen Sie eine Miniaturansicht in Laravel mit der Interventionsbildbibliothek
Auf der Website beschäftigen wir uns immer mit den Bildern. Je nach Anforderung verwenden wir verschiedene Bildversionen. Es ist eine gute Praxis für Entwickler, verschiedene Versionen oder Miniaturansichten des einzelnen Bildes zu erstellen. Diese Miniaturansichten können verwendet werden, während je nach Containergröße unterschiedliche Bildgrößen angezeigt werden. Das Anzeigen eines Bildes, das der Containergröße entspricht, spart Bandbreite und verbessert die Ladezeit der Seite. Das Anzeigen eines großen Bildes in einem kleinen Container ist eine schlechte Vorgehensweise und beeinträchtigt die Ladezeit der Seite. Daher wird empfohlen, mehrere Miniaturansichten eines Bildes zu erstellen und bei Bedarf die entsprechende Version zu verwenden.
In diesem Artikel untersuchen wir, wie Sie mit der Interventionsbildbibliothek in Laravel ein Miniaturbild erstellen. Intervention Image ist kostenlos und eine der beliebtesten Bibliotheken zur Bildbearbeitung. Im Hintergrund verwendet diese Bibliothek die GD-Bibliothek und Imagick zur Bildbearbeitung.
Für dieses Tutorial werde ich 3 Miniaturansichten erstellen – klein, mittel, groß mit den Größen 150 93, 300 * 185 bzw. 550 340. Ändern Sie diese Größen nach Ihren Wünschen.
Einstieg
Um zu beginnen, müssen Sie zuerst die Intervention Image-Bibliothek in Laravel installieren. Öffnen Sie das Terminal in Ihrem Projekt-Stammverzeichnis und führen Sie den folgenden Befehl aus:
composer require intervention/image
Öffnen Sie nach der Installation der Bibliothek die config/app.php
Datei und fügen Sie die folgenden Zeilen hinzu.
Fügen Sie dem $providers
Array die Dienstanbieter für dieses Paket hinzu .
InterventionImageImageServiceProvider::class
Fügen Sie die Fassade zum $aliases
Array hinzu.
'Image' => InterventionImageFacadesImage::class
Als nächstes müssen wir zum Speichern der Bilder ein Verzeichnis erstellen. Gehen Sie zum Terminal und führen Sie den Befehl wie folgt aus:
php artisan storage:link
Dieser Befehl erstellt ein Speicherverzeichnis (symbolischer Link) unter dem öffentlichen Ordner. In diesen Ordner lade ich das Originalbild und seine Miniaturansichten hoch.
Erstellen Sie eine Miniaturansicht in Laravel
Wir haben uns alle mit dem Grundsetup eingerichtet und können nun den eigentlichen Code schreiben. Lassen Sie uns ein Formular in Ihrer Ansichtsdatei erstellen.
<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>
Im Controller müssen Sie die Bibliothek Fassade ‘Image’ hinzufügen, die wir in der config/app.php
Datei hinzugefügt haben .
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use Image;
class ImageController extends Controller
{
}
Durch das Hinzufügen der Fassade können wir Funktionen der Intervention Image Library aufrufen. Im folgenden Code werde ich das Bild an zwei Stellen hochladen. Das Originalbild geht direkt in den storage/profile_images
Ordner. Die Miniaturansichten werden im storage/profile_images/thumbnail
Verzeichnis gespeichert. Wir laden zuerst das Originalbild in den Thumbnail-Ordner hoch und ändern dann die Größe.
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;
//small thumbnail name
$smallthumbnail = $filename.'_small_'.time().'.'.$extension;
//medium thumbnail name
$mediumthumbnail = $filename.'_medium_'.time().'.'.$extension;
//large thumbnail name
$largethumbnail = $filename.'_large_'.time().'.'.$extension;
//Upload File
$request->file('profile_image')->storeAs('public/profile_images', $filenametostore);
$request->file('profile_image')->storeAs('public/profile_images/thumbnail', $smallthumbnail);
$request->file('profile_image')->storeAs('public/profile_images/thumbnail', $mediumthumbnail);
$request->file('profile_image')->storeAs('public/profile_images/thumbnail', $largethumbnail);
//create small thumbnail
$smallthumbnailpath = public_path('storage/profile_images/thumbnail/'.$smallthumbnail);
$this->createThumbnail($smallthumbnailpath, 150, 93);
//create medium thumbnail
$mediumthumbnailpath = public_path('storage/profile_images/thumbnail/'.$mediumthumbnail);
$this->createThumbnail($mediumthumbnailpath, 300, 185);
//create large thumbnail
$largethumbnailpath = public_path('storage/profile_images/thumbnail/'.$largethumbnail);
$this->createThumbnail($largethumbnailpath, 550, 340);
return redirect('image')->with('success', "Image uploaded successfully.");
}
}
Im obigen Code speichere ich das Bild mit 3 Formaten klein, mittel und groß. Nach dem Speichern rufen wir die Methode auf createThumbnail
und übergeben die erforderliche Breite und Höhe an die Methode. Lassen Sie uns diese Funktion unten definieren. Diese Funktion sollte in den gleichen Controller gehen.
/**
* Create a thumbnail of specified size
*
* @param string $path path of thumbnail
* @param int $width
* @param int $height
*/
public function createThumbnail($path, $width, $height)
{
$img = Image::make($path)->resize($width, $height, function ($constraint) {
$constraint->aspectRatio();
});
$img->save($path);
}
Hier ändern wir die Größe des Bildes proportional. Dabei behalten wir das Seitenverhältnis bei und das Bild wird nicht abgeschnitten.
Wenn Sie nach einer harten Ernte suchen, ersetzen Sie die folgenden Zeilen
$img = Image::make($path)->resize($width, $height, function ($constraint) {
$constraint->aspectRatio();
});
$img->save($path);
Mit
$img = Image::make($path)->resize($width, $height)->save($path);
Ich hoffe, Sie verstehen, wie Sie mit der Interventionsbildbibliothek in Laravel ein Miniaturbild erstellen. Ich würde gerne Ihre Meinung im Kommentarbereich unten hören.
Zum Thema passende Artikel
- Bildgröße in Laravel mithilfe der Interventions-Bildbibliothek ändern
- Eine Anleitung zum Hochladen und Komprimieren von Bildern in Laravel
- Laden Sie mehrere Bilder in Laravel hoch und ändern Sie die Größe