...
✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

Erstellen Sie eine Miniaturansicht in Laravel mit der Interventionsbildbibliothek

24

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.phpDatei und fügen Sie die folgenden Zeilen hinzu.

Fügen Sie dem $providersArray die Dienstanbieter für dieses Paket hinzu .

InterventionImageImageServiceProvider::class

Fügen Sie die Fassade zum $aliasesArray 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.phpDatei 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_imagesOrdner. Die Miniaturansichten werden im storage/profile_images/thumbnailVerzeichnis 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 createThumbnailund ü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

Aufnahmequelle: artisansweb.net

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen