{"id":24812,"date":"2021-05-25T13:49:00","date_gmt":"2021-05-25T10:49:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=24812"},"modified":"2021-10-18T02:13:44","modified_gmt":"2021-10-17T23:13:44","slug":"comment-telecharger-et-recadrer-une-image-dans-laravel-a-l-aide-d-imgareaselect-et-de-la-bibliotheque-d-images-d-intervention","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fr\/comment-telecharger-et-recadrer-une-image-dans-laravel-a-l-aide-d-imgareaselect-et-de-la-bibliotheque-d-images-d-intervention\/","title":{"rendered":"Comment t\u00e9l\u00e9charger et recadrer une image dans Laravel \u00e0 l&rsquo;aide d&rsquo;imgAreaSelect et de la biblioth\u00e8que d&rsquo;images d&rsquo;intervention"},"content":{"rendered":"<p>R\u00e9cemment, l&rsquo;un de nos lecteurs a demand\u00e9 d&rsquo;\u00e9crire un article sur le t\u00e9l\u00e9chargement et le recadrage d&rsquo;images dans Laravel. Dans le pass\u00e9, j&rsquo;ai publi\u00e9 l&rsquo;article sur le m\u00eame sujet pour PHP <a href=\"https:\/\/themewp.inform.click\/fr\/comment-telecharger-recadrer-et-redimensionner-une-image-a-l-aide-de-jquery-et-php\/\" title=\"Upload, Crop and Resize Image in PHP\" >Upload, Crop and Resize Image in PHP<\/a>. Mais quand il s&rsquo;agit de Laravel, nous devons apporter des modifications conform\u00e9ment aux normes de Laravel. Dans cet article, nous \u00e9tudions comment t\u00e9l\u00e9charger et recadrer des images dans Laravel.<\/p>\n<p>Pour ce tutoriel, je vais utiliser 2 biblioth\u00e8ques &#8211; imgAreaSelect et Intervention Image.<\/p>\n<p><a href=\"https:\/\/plugins.jquery.com\/imgareaselect\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">imgAreaSelect<\/a> est un plugin jQuery qui permet de recadrer des images en s\u00e9lectionnant une zone rectangulaire d&rsquo;une image. C&rsquo;est un plugin l\u00e9ger et facile \u00e0 utiliser.<\/p>\n<p>D&rsquo;autre part, <a href=\"http:\/\/image.intervention.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Intervention Image<\/a> est une biblioth\u00e8que de traitement et de manipulation d&rsquo;images. Cette biblioth\u00e8que nous aide \u00e0 cr\u00e9er, \u00e9diter et composer des images c\u00f4t\u00e9 serveur.<\/p>\n<p>Dans ce didacticiel, j&rsquo;utiliserai imgAreaSelect pour obtenir les coordonn\u00e9es de l&rsquo;image recadr\u00e9e et la biblioth\u00e8que d&rsquo;images d&rsquo;intervention pour recadrer r\u00e9ellement l&rsquo;image c\u00f4t\u00e9 serveur selon les coordonn\u00e9es.<\/p>\n<h3>Commencer<\/h3>\n<p>Pour commencer, vous devriez avoir install\u00e9 le Laravel. Si vous ne l&rsquo;avez pas encore cr\u00e9\u00e9, installez-le via la commande\u00a0:<\/p>\n<pre><code>composer create-project --prefer-dist laravel\/laravel laravel-dev<\/code><\/pre>\n<p>La commande ci-dessus configurera le projet Laravel appel\u00e9 &lsquo;laravel-dev&rsquo; pour vous.<\/p>\n<p>Ensuite, installez la biblioth\u00e8que d&rsquo;images Intervention dans votre projet Laravel. Ex\u00e9cutez la commande ci-dessous \u00e0 partir du r\u00e9pertoire racine du projet.<\/p>\n<pre><code>composer require intervention\/image<\/code><\/pre>\n<p>Apr\u00e8s avoir install\u00e9 la biblioth\u00e8que, ouvrez le <code>config\/app.php<\/code>fichier et ajoutez-y les lignes suivantes.<\/p>\n<p>Ajoutez les fournisseurs de services pour ce package dans le <code>$providers<\/code>tableau.<\/p>\n<pre><code>InterventionImageImageServiceProvider::class<\/code><\/pre>\n<p>Ajoutez la fa\u00e7ade au <code>$aliases<\/code>tableau.<\/p>\n<pre><code>'Image' =&gt; InterventionImageFacadesImage::class<\/code><\/pre>\n<p>Enfin, t\u00e9l\u00e9chargez le plugin <a href=\"https:\/\/plugins.jquery.com\/imgareaselect\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">imgAreaSelect<\/a>. \u00c0 partir du zip t\u00e9l\u00e9charg\u00e9, copiez les images, CSS, fichier JS et collez-les dans le dossier public du projet Laravel. Fondamentalement, votre structure devrait ressembler \u00e0 la capture d&rsquo;\u00e9cran ci-dessous.<\/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=\"Comment t\u00e9l\u00e9charger et recadrer une image dans Laravel \u00e0 l&#039;aide d&#039;imgAreaSelect et de la biblioth\u00e8que d&#039;images d&#039;intervention\" ><\/a><\/p>\n<h3>Comment utiliser imgAreaSelect<\/h3>\n<p>Comme nous allons utiliser CSS et JS du plugin imgAreaSelect, construisons une structure pour cela. Cr\u00e9ez un <code>resources\/views\/layouts\/app.blade.php<\/code>fichier et ajoutez-y le code ci-dessous.<\/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>Ce fichier agit comme un fichier commun pour toutes les lames. En utilisant les espaces r\u00e9serv\u00e9s (<code>@yield<\/code>), on peut placer le code dans le fichier blade aux endroits respectifs comme dans l&rsquo;en-t\u00eate, le pied de page, etc.<\/p>\n<p>Cr\u00e9ez un <code>image.blade.php<\/code>fichier dans le <code>resources\/views<\/code>r\u00e9pertoire. Ce fichier lame aura le code suivant.<\/p>\n<p><strong>image.lame.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>Vous avez peut-\u00eatre remarqu\u00e9 des \u00e9l\u00e9ments du fichier ci-dessus comme <code>@extends('layouts.app')<\/code>, <code>@section('style')<\/code>, <code>@section('content')<\/code>, etc. Ces sections iront aux emplacements respectifs de <code>app.blade.php<\/code>. L&rsquo;utilisateur peut s&rsquo;en faire une meilleure id\u00e9e en visualisant la source de cette page dans le navigateur.<\/p>\n<p>Pour appeler cette vue, cr\u00e9ez un contr\u00f4leur \u00e0 l&rsquo;aide de la commande\u00a0:<\/p>\n<pre><code>php artisan make:controller ImageController --resource<\/code><\/pre>\n<p>Ajoutez la r\u00e9f\u00e9rence de ce contr\u00f4leur dans le fichier de route.<\/p>\n<p><strong>itin\u00e9raires\/web.php<\/strong><\/p>\n<pre><code>Route::resource('image', 'ImageController');<\/code><\/pre>\n<p>Ouvrez le &lsquo;ImageController&rsquo; dans l&rsquo;\u00e9diteur et \u00e0 la m\u00e9thode &lsquo;index&rsquo; appelez le fichier de vue.<\/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>Ex\u00e9cutez la <code>php artisan serve<\/code>commande et vous pourrez voir votre formulaire \u00e0 l&rsquo;URL ci-dessous.<\/p>\n<pre><code>http:\/\/localhost:8000\/image<\/code><\/pre>\n<p>Lorsque vous t\u00e9l\u00e9chargez l&rsquo;image, vous devriez voir l&rsquo;image d&rsquo;aper\u00e7u sous le formulaire. \u00c0 partir de cet aper\u00e7u, vous pouvez s\u00e9lectionner une partie de l&rsquo;image que vous souhaitez recadrer.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20475-6081f7850f82b.png\"><\/a><\/p>\n<h3>T\u00e9l\u00e9charger et recadrer l&rsquo;image \u00e0 l&rsquo;aide de la biblioth\u00e8que d&rsquo;images d&rsquo;intervention<\/h3>\n<p>\u00c0 ce stade, nous avons termin\u00e9 avec le code c\u00f4t\u00e9 client o\u00f9 l&rsquo;utilisateur peut choisir une partie de l&rsquo;image qu&rsquo;il souhaite recadrer. La t\u00e2che suivante consiste \u00e0 recadrer l&rsquo;image et \u00e0 la stocker sur le serveur. Pour stocker une image sur un serveur, j&rsquo;utiliserai la fonction de stockage Laravel o\u00f9 nous cr\u00e9ons un lien symbolique d&rsquo;un dossier \u00ab\u00a0stockage\u00a0\u00bb. Pour cr\u00e9er un lien symbolique, ex\u00e9cutez la commande\u00a0:<\/p>\n<pre><code>php artisan storage:link<\/code><\/pre>\n<p>Cette commande cr\u00e9e un r\u00e9pertoire \u00ab\u00a0stockage\u00a0\u00bb dans le dossier \u00ab\u00a0public\u00a0\u00bb.<\/p>\n<p>Dans notre contr\u00f4leur, nous avons d\u00e9j\u00e0 inclus une fa\u00e7ade <code>use Image;<\/code>, vous pouvez donc utiliser la biblioth\u00e8que d&rsquo;images Intervention pour recadrer l&rsquo;image c\u00f4t\u00e9 serveur. La <code>store()<\/code>m\u00e9thode du contr\u00f4leur devrait avoir un code comme ci-dessous\u00a0:<\/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>Dans ce code, nous stockons une version recadr\u00e9e d&rsquo;une image dans le r\u00e9pertoire &lsquo;public\/storage\/profile_images\/crop&rsquo;. Apr\u00e8s l&rsquo;avoir stock\u00e9, nous passons un chemin de l&rsquo;image recadr\u00e9e vers la vue. Et dans le fichier de vue, nous avons d\u00e9j\u00e0 ajout\u00e9 un code qui affiche l&rsquo;image recadr\u00e9e \u00e0 l&rsquo;utilisateur final.<\/p>\n<h3>D\u00e9finir la largeur maximale sur l&rsquo;image<\/h3>\n<p>Parfois, les utilisateurs peuvent vouloir d\u00e9finir la largeur maximale pour la version recadr\u00e9e d&rsquo;une image. Le plugin imgAreaSelect fournit plusieurs options comme aspectRatio, maxWidth, maxHeight, etc. pour personnaliser le r\u00e9sultat final d&rsquo;une image. Un utilisateur peut utiliser l&rsquo;option maxWidth en modifiant le code JavaScript comme suit\u00a0:<\/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>Il s&rsquo;agit de t\u00e9l\u00e9charger et de recadrer des images dans Laravel. J&rsquo;esp\u00e8re que vous avez appris \u00e0 g\u00e9rer la t\u00e2che de recadrage d&rsquo;images. J&rsquo;aimerais entendre vos pens\u00e9es et suggestions dans la section des commentaires ci-dessous.<\/p>\n<h4>Articles Li\u00e9s<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/redimensionner-l-image-dans-laravel-a-l-aide-de-la-bibliotheque-d-images-d-intervention\/\" title=\"Redimensionner l&#039;image dans Laravel \u00e0 l&#039;aide de la biblioth\u00e8que d&#039;images d&#039;intervention\">Redimensionner l&rsquo;image dans Laravel \u00e0 l&rsquo;aide de la biblioth\u00e8que d&rsquo;images d&rsquo;intervention<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/comment-telecharger-et-compresser-des-images-dans-laravel\/\" title=\"Un guide pour t\u00e9l\u00e9charger et compresser des images dans Laravel\">Un guide pour t\u00e9l\u00e9charger et compresser des images dans Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/creer-une-vignette-dans-laravel-a-l-aide-de-la-bibliotheque-d-images-d-intervention\/\" title=\"Cr\u00e9er une vignette dans Laravel \u00e0 l&#039;aide de la biblioth\u00e8que d&#039;images d&#039;intervention\">Cr\u00e9er une vignette dans Laravel \u00e0 l&rsquo;aide de la biblioth\u00e8que d&rsquo;images d&rsquo;intervention<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans cet article, nous vous montrons comment t\u00e9l\u00e9charger et recadrer une image dans Laravel. Pour cela, nous utilisons la biblioth\u00e8que d&rsquo;images imgAreaSelect et Intervention.<\/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":[497],"tags":[844],"class_list":["post-24812","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel2-4","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/24812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/comments?post=24812"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/24812\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media\/21676"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media?parent=24812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/categories?post=24812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/tags?post=24812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}