{"id":24792,"date":"2021-05-25T14:03:00","date_gmt":"2021-05-25T11:03:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=24792"},"modified":"2021-10-18T02:39:05","modified_gmt":"2021-10-17T23:39:05","slug":"so-laden-sie-ein-bild-in-laravel-hoch-und-beschneiden-es-mit-der-imgareaselect-und-interventions-bildbibliothek","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/de\/so-laden-sie-ein-bild-in-laravel-hoch-und-beschneiden-es-mit-der-imgareaselect-und-interventions-bildbibliothek\/","title":{"rendered":"So laden Sie ein Bild in Laravel hoch und beschneiden es mit der imgAreaSelect- und Interventions-Bildbibliothek"},"content":{"rendered":"<p>K\u00fcrzlich bat einer unserer Leser darum, einen Artikel \u00fcber das Hochladen und Zuschneiden von Bildern in Laravel zu schreiben. In der Vergangenheit habe ich den Artikel zum gleichen Thema f\u00fcr PHP <a href=\"https:\/\/themewp.inform.click\/de\/wie-man-ein-bild-mit-jquery-und-php-hochlaedt-zuschneidet-und-seine-groesse-aendert\/\" title=\"Upload, Crop and Resize Image in PHP ver\u00f6ffentlicht\" >Upload, Crop and Resize Image in PHP ver\u00f6ffentlicht<\/a>. Aber wenn es um Laravel geht, m\u00fcssen wir \u00c4nderungen gem\u00e4\u00df den Laravel-Standards vornehmen. In diesem Artikel untersuchen wir, wie Sie Bilder in Laravel hochladen und zuschneiden.<\/p>\n<p>F\u00fcr dieses Tutorial werde ich 2 Bibliotheken verwenden \u2013 imgAreaSelect und Intervention Image.<\/p>\n<p><a href=\"https:\/\/plugins.jquery.com\/imgareaselect\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">imgAreaSelect<\/a> ist ein jQuery-Plugin, das das Zuschneiden von Bildern durch Auswahl eines rechteckigen Bildbereichs erm\u00f6glicht. Es ist ein leichtes Plugin und einfach zu bedienen.<\/p>\n<p>Andererseits ist <a href=\"http:\/\/image.intervention.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Intervention Image<\/a> eine Bibliothek zur Bildbearbeitung und -manipulation. Diese Bibliothek hilft uns, Bilder serverseitig zu erstellen, zu bearbeiten und zu komponieren.<\/p>\n<p>In diesem Tutorial verwende ich imgAreaSelect, um die Koordinaten f\u00fcr das zugeschnittene Bild zu erhalten, und die Interventions-Bildbibliothek, um das Bild auf der Serverseite gem\u00e4\u00df Koordinaten zuzuschneiden.<\/p>\n<h3>Einstieg<\/h3>\n<p>F\u00fcr den Einstieg sollten Sie Laravel installiert haben. Wenn Sie es noch nicht erstellt haben, installieren Sie es mit dem Befehl:<\/p>\n<pre><code>composer create-project --prefer-dist laravel\/laravel laravel-dev<\/code><\/pre>\n<p>Der obige Befehl richtet das Laravel-Projekt namens &#8218;laravel-dev&#8216; f\u00fcr Sie ein.<\/p>\n<p>Installieren Sie als N\u00e4chstes die Intervention-Bildbibliothek in Ihrem Laravel-Projekt. F\u00fchren Sie den folgenden Befehl aus dem Projektstammverzeichnis aus.<\/p>\n<pre><code>composer require intervention\/image<\/code><\/pre>\n<p>\u00d6ffnen Sie nach der Installation der Bibliothek die <code>config\/app.php<\/code>Datei und f\u00fcgen Sie die folgenden Zeilen hinzu.<\/p>\n<p>F\u00fcgen Sie dem <code>$providers<\/code>Array die Dienstanbieter f\u00fcr dieses Paket hinzu .<\/p>\n<pre><code>InterventionImageImageServiceProvider::class<\/code><\/pre>\n<p>F\u00fcgen Sie die Fassade zum <code>$aliases<\/code>Array hinzu.<\/p>\n<pre><code>'Image' =&gt; InterventionImageFacadesImage::class<\/code><\/pre>\n<p>Laden Sie schlie\u00dflich das <a href=\"https:\/\/plugins.jquery.com\/imgareaselect\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">imgAreaSelect-<\/a> Plugin herunter. Kopieren Sie aus der heruntergeladenen ZIP-Datei Bilder, CSS, JS-Datei und f\u00fcgen Sie sie in den \u00f6ffentlichen Ordner des Laravel-Projekts ein. Grunds\u00e4tzlich sollte Ihre Struktur wie im Screenshot unten aussehen.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20475-6081f7850f82b.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20475-6081f7850f82b.png\" alt=\"So laden Sie ein Bild in Laravel hoch und beschneiden es mit der imgAreaSelect- und Interventions-Bildbibliothek\" ><\/a><\/p>\n<h3>So verwenden Sie imgAreaSelect<\/h3>\n<p>Da wir CSS und JS des imgAreaSelect-Plugins verwenden werden, erstellen wir eine Struktur daf\u00fcr. Erstellen Sie eine <code>resources\/views\/layouts\/app.blade.php<\/code>Datei und f\u00fcgen Sie den folgenden Code darin ein.<\/p>\n<pre><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"{{ app()-&gt;getLocale() }}\"&gt;\n&lt;head&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;meta charset=\"utf-8\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0&lt;!-- CSRF Token --&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;meta name=\"csrf-token\" content=\"{{ csrf_token() }}\"&gt;\n\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0&lt;title&gt;{{ config('app.name', 'Laravel') }}&lt;\/title&gt;\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0@yield('style')\n&lt;\/head&gt;\n&lt;body&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div id=\"app\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@yield('content')\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0@yield('footer')\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>Diese Datei fungiert als gemeinsame Datei f\u00fcr alle Blades. Mit den Platzhaltern (<code>@yield<\/code>) kann man den Code in der Blade-Datei an den entsprechenden Stellen wie Header, Footer etc. platzieren.<\/p>\n<p>Erstellen Sie eine <code>image.blade.php<\/code>Datei im <code>resources\/views<\/code>Verzeichnis. Diese Blade-Datei enth\u00e4lt den folgenden Code.<\/p>\n<p><strong>image.blade.php<\/strong><\/p>\n<pre><code>@extends('layouts.app')\n\u00a0\u00a0\n@section('style')\n\u00a0\u00a0\u00a0\u00a0&lt;link rel=\"stylesheet\" href=\"{{ asset('css\/imgareaselect.css') }}\" \/&gt;\n@endsection\n\u00a0\u00a0\n@section('content')\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0@if(session('success'))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"alert alert-success\"&gt;{{session('success')}}&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0@endif\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"container mt-5\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;form action=\"{{ url('image') }}\" method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label for=\"exampleInputImage\"&gt;Image:&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" name=\"profile_image\" id=\"exampleInputImage\" class=\"image\" required&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"hidden\" name=\"x1\" value=\"\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"hidden\" name=\"y1\" value=\"\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"hidden\" name=\"w\" value=\"\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"hidden\" name=\"h\" value=\"\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{{ csrf_field() }}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\" class=\"btn btn-primary\"&gt;Submit&lt;\/button&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/form&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"row mt-5\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;img id=\"previewimage\" style=\"display:none;\"\/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@if(session('path'))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;img src=\"{{ session('path') }}\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@endif\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n@endsection\n\u00a0\n@section('footer')\n\u00a0\u00a0\u00a0\u00a0&lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery\/3.5.1\/jquery.min.js\"&gt;&lt;\/script&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;script src=\"{{ asset('js\/jquery.imgareaselect.min.js') }}\"&gt;&lt;\/script&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;script&gt;\n\u00a0\u00a0\u00a0\u00a0jQuery(function($) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var p = $(\"#previewimage\");\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$(\"body\").on(\"change\", \".image\", function(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var imageReader = new FileReader();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0imageReader.readAsDataURL(document.querySelector(\".image\").files[0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0imageReader.onload = function (oFREvent) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0p.attr('src', oFREvent.target.result).fadeIn();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0};\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('#previewimage').imgAreaSelect({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0onSelectEnd: function (img, selection) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('input[name=\"x1\"]').val(selection.x1);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('input[name=\"y1\"]').val(selection.y1);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('input[name=\"w\"]').val(selection.width);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('input[name=\"h\"]').val(selection.height);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0&lt;\/script&gt;\n@endsection<\/code><\/pre>\n<p>Sie haben vielleicht ein paar Sachen aus der obigen Datei wie bemerkt <code>@extends('layouts.app')<\/code>, <code>@section('style')<\/code>, <code>@section('content')<\/code>usw. Diese Abschnitte in den jeweiligen Orten gehen <code>app.blade.php<\/code>. Der Benutzer kann sich ein besseres Bild davon machen, wenn Sie die Quelle dieser Seite im Browser anzeigen.<\/p>\n<p>Um diese Ansicht aufzurufen, erstellen Sie einen Controller mit dem Befehl:<\/p>\n<pre><code>php artisan make:controller ImageController --resource<\/code><\/pre>\n<p>F\u00fcgen Sie die Referenz dieses Controllers in die Routendatei ein.<\/p>\n<p><strong>routen\/web.php<\/strong><\/p>\n<pre><code>Route::resource('image', 'ImageController');<\/code><\/pre>\n<p>\u00d6ffnen Sie den &#8218;ImageController&#8216; im Editor und rufen Sie mit der Methode &#8218;index&#8216; die View-Datei auf.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse Image;\n\u00a0\nclass ImageController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Display a listing of the resource.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return IlluminateHttpResponse\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function index()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return view('image');\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0.....\n}<\/code><\/pre>\n<p>F\u00fchren Sie den <code>php artisan serve<\/code>Befehl aus und Sie k\u00f6nnen Ihr Formular unter der folgenden URL sehen.<\/p>\n<pre><code>http:\/\/localhost:8000\/image<\/code><\/pre>\n<p>Wenn Sie das Bild hochladen, sollten Sie das Vorschaubild unter dem Formular sehen. In dieser Vorschau k\u00f6nnen Sie einen Teil des Bildes ausw\u00e4hlen, den Sie zuschneiden m\u00f6chten.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20475-6081f7850f82b.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20475-6081f7850f82b.png\" alt=\"So laden Sie ein Bild in Laravel hoch und beschneiden es mit der imgAreaSelect- und Interventions-Bildbibliothek\" ><\/a><\/p>\n<h3>Hochladen und Zuschneiden von Bildern mithilfe der Interventions-Bildbibliothek<\/h3>\n<p>An dieser Stelle sind wir mit dem clientseitigen Code abgeschlossen, bei dem der Benutzer einen Teil des Bildes ausw\u00e4hlen kann, den er zuschneiden m\u00f6chte. Der n\u00e4chste Job besteht darin, das Bild zuzuschneiden und auf dem Server zu speichern. Um ein Bild auf einem Server zu speichern, verwende ich die Laravel-Speicherfunktion, bei der wir einen Symlink eines Ordners &quot;Speicher&quot; erstellen. F\u00fchren Sie den Befehl aus, um einen symbolischen Link zu erstellen:<\/p>\n<pre><code>php artisan storage:link<\/code><\/pre>\n<p>Dieser Befehl erstellt ein &#8217;storage&#8216;-Verzeichnis unter dem &#8218;public&#8216;-Ordner.<\/p>\n<p>In unserem Controller haben wir bereits eine Fassade integriert, <code>use Image;<\/code>sodass Sie die Intervention-Bildbibliothek verwenden k\u00f6nnen, um das Bild serverseitig zu beschneiden. Die <code>store()<\/code>Methode des Controllers sollte folgenden Code haben:<\/p>\n<pre><code>\/**\n\u00a0* Store a newly created resource in storage.\n\u00a0*\n\u00a0* @param\u00a0 IlluminateHttpRequest\u00a0 $request\n\u00a0* @return IlluminateHttpResponse\n\u00a0*\/\npublic function store(Request $request)\n{\n\u00a0\u00a0\u00a0\u00a0if($request-&gt;hasFile('profile_image')) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename with extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenamewithextension = $request-&gt;file('profile_image')-&gt;getClientOriginalName();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename without extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get file extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$extension = $request-&gt;file('profile_image')-&gt;getClientOriginalExtension();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/filename to store\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenametostore = $filename.'_'.time().'.'.$extension;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/Upload File\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$request-&gt;file('profile_image')-&gt;storeAs('public\/profile_images', $filenametostore);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(!file_exists(public_path('storage\/profile_images\/crop'))) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mkdir(public_path('storage\/profile_images\/crop'), 0755);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ crop image\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$img = Image::make(public_path('storage\/profile_images\/'.$filenametostore));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$croppath = public_path('storage\/profile_images\/crop\/'.$filenametostore);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$img-&gt;crop($request-&gt;input('w'), $request-&gt;input('h'), $request-&gt;input('x1'), $request-&gt;input('y1'));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$img-&gt;save($croppath);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ you can save crop image path below in database\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$path = asset('storage\/profile_images\/crop\/'.$filenametostore);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return redirect('image')-&gt;with(['success' =&gt; \"Image cropped successfully.\", 'path' =&gt; $path]);\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>In diesem Code speichern wir eine zugeschnittene Version eines Bildes im Verzeichnis \u201apublic\/storage\/profile_images\/crop&#8216;. Nach dem Speichern \u00fcbergeben wir einen Pfad des zugeschnittenen Bildes zur\u00fcck zur Ansicht. Und in der Ansichtsdatei haben wir bereits einen Code hinzugef\u00fcgt, der dem Endbenutzer das zugeschnittene Bild anzeigt.<\/p>\n<h3>Legen Sie die maximale Breite f\u00fcr das Bild fest<\/h3>\n<p>Manchmal m\u00f6chten Benutzer m\u00f6glicherweise die maximale Breite f\u00fcr die Zuschneideversion eines Bildes definieren. Das imgAreaSelect-Plugin bietet verschiedene Optionen wie z. B. Seitenverh\u00e4ltnis, maxWidth, maxHeight usw., um das Endergebnis eines Bildes anzupassen. Ein Benutzer kann die Option maxWidth verwenden, indem er den JavaScript-Code wie folgt \u00e4ndert:<\/p>\n<pre><code>$('#previewimage').imgAreaSelect({\n\u00a0\u00a0\u00a0\u00a0maxWidth: '1000', \/\/ this value is in pixels\n\u00a0\u00a0\u00a0\u00a0onSelectEnd: function (img, selection) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('input[name=\"x1\"]').val(selection.x1);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('input[name=\"y1\"]').val(selection.y1);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('input[name=\"w\"]').val(selection.width);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('input[name=\"h\"]').val(selection.height);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \n\u00a0\u00a0\u00a0\u00a0}\n});<\/code><\/pre>\n<p>Es dreht sich alles um das Hochladen und Zuschneiden von Bildern in Laravel. Ich hoffe, Sie haben gelernt, wie man mit der Aufgabe des Zuschneidens von Bildern umgeht. Ich w\u00fcrde gerne Ihre Gedanken und Vorschl\u00e4ge im Kommentarbereich unten h\u00f6ren.<\/p>\n<h4>Zum Thema passende Artikel<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/bildgrose-in-laravel-mithilfe-der-interventions-bildbibliothek-andern\/\" title=\"Bildgr\u00f6\u00dfe in Laravel mithilfe der Interventions-Bildbibliothek \u00e4ndern\">Bildgr\u00f6\u00dfe in Laravel mithilfe der Interventions-Bildbibliothek \u00e4ndern<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/so-laden-und-komprimieren-sie-bilder-in-laravel\/\" title=\"Eine Anleitung zum Hochladen und Komprimieren von Bildern in Laravel\">Eine Anleitung zum Hochladen und Komprimieren von Bildern in Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/erstellen-sie-eine-miniaturansicht-in-laravel-mit-der-interventionsbildbibliothek\/\" title=\"Erstellen Sie eine Miniaturansicht in Laravel mit der Interventionsbildbibliothek\">Erstellen Sie eine Miniaturansicht in Laravel mit der Interventionsbildbibliothek<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Aufnahmequelle:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Artikel zeigen wir Ihnen, wie Sie Bilder in Laravel hochladen und zuschneiden. Dazu verwenden wir imgAreaSelect und die Interventions-Bildbibliothek.<\/p>\n","protected":false},"author":1,"featured_media":21676,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[496],"tags":[845],"class_list":["post-24792","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-de"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/24792","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/comments?post=24792"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/24792\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media\/21676"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media?parent=24792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/categories?post=24792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/tags?post=24792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}