{"id":25096,"date":"2021-05-31T15:27:00","date_gmt":"2021-05-31T12:27:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=25096"},"modified":"2021-10-18T02:10:05","modified_gmt":"2021-10-17T23:10:05","slug":"comment-telecharger-et-compresser-des-images-dans-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fr\/comment-telecharger-et-compresser-des-images-dans-laravel\/","title":{"rendered":"Comment t\u00e9l\u00e9charger et compresser des images dans Laravel"},"content":{"rendered":"<p>Vous cherchez comment t\u00e9l\u00e9charger et compresser des images dans Laravel? Laravel fournit un moyen facile de t\u00e9l\u00e9charger des fichiers. Et compresser les images au moment du t\u00e9l\u00e9chargement est une bonne pratique. Dans cet article, je vous montre comment t\u00e9l\u00e9charger et compresser des images dans Laravel.<\/p>\n<h3>Pourquoi avoir besoin de compresser des images ?<\/h3>\n<p>Les images jouent un r\u00f4le important dans votre site Web. Les images ajoutent une meilleure exp\u00e9rience utilisateur et une exp\u00e9rience accrocheuse pour les visiteurs. Mais en m\u00eame temps, cela peut \u00e9galement tuer les performances du site. Les images lourdes ralentissent le site. En cons\u00e9quence, votre site prend beaucoup de temps \u00e0 charger. Les utilisateurs n&rsquo;aiment pas les sites Web lents. Si votre site met plus de temps \u00e0 se charger, il y a de fortes chances que vous perdiez votre audience. Le temps de chargement standard d&rsquo;un site Web est de 2 secondes. Vous devez veiller \u00e0 ce que votre site se charge dans les 2 secondes.<\/p>\n<p>Bien qu&rsquo;il y ait plusieurs facteurs qui doivent \u00eatre pris en consid\u00e9ration afin d&rsquo;am\u00e9liorer la vitesse de la page, l&rsquo;un d&rsquo;eux est l&rsquo;utilisation d&rsquo;images optimis\u00e9es. La compression d&rsquo;images r\u00e9duit la taille de votre image originale sans perdre sa qualit\u00e9. Cela aide \u00e0 augmenter la vitesse du site.<\/p>\n<p>Cela dit, voyons comment t\u00e9l\u00e9charger et compresser des images dans Laravel.<\/p>\n<h3>T\u00e9l\u00e9charger des images dans Laravel<\/h3>\n<p>Laravel fournit un moyen propre de t\u00e9l\u00e9charger les images. Pour commencer, nous devons d&rsquo;abord cr\u00e9er un r\u00e9pertoire o\u00f9 nous stockerons les images. Ouvrez votre invite de commande dans le r\u00e9pertoire racine et ex\u00e9cutez la commande ci-dessous.<\/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>Ensuite, cr\u00e9ez un formulaire avec le bouton de saisie et de soumission du fichier en ajoutant le code ci-dessous dans votre fichier blade.<\/p>\n<pre><code>&lt;form action=\"{{ url('ROUTE_HERE') }}\" method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label for=\"exampleInputFile\"&gt;File input&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" name=\"profile_image\" id=\"exampleInputFile\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0{{ csrf_field() }}\n\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\" class=\"btn btn-default\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Dans le code HTML ci-dessus, j&rsquo;ai ajout\u00e9 un fichier d&rsquo;entr\u00e9e avec le nom &lsquo;profile_image&rsquo;. J&rsquo;ai \u00e9galement ajout\u00e9 <code>{{ csrf_field() }}<\/code>ce qui est n\u00e9cessaire pour soumettre des formulaires Laravel.<\/p>\n<p>Maintenant, en supposant que vous envoyez la demande de publication \u00e0 la <code>store()<\/code>m\u00e9thode de votre contr\u00f4leur, \u00e9crivez un code qui stocke l&rsquo;image sur le serveur comme ci-dessous.<\/p>\n<pre><code>public 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\u00a0\/\/Compress Image Code Here\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return redirect('ROUTE_HERE')-&gt;with('success', \"Image uploaded successfully.\");\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Ce code cr\u00e9e un nom de fichier unique et stocke le fichier dans le r\u00e9pertoire &lsquo;profile_images&rsquo;. Laravel g\u00e9n\u00e8re automatiquement un r\u00e9pertoire &lsquo;profile_images&rsquo; sous &lsquo;public\/storage&rsquo; s&rsquo;il n&rsquo;existe pas.<\/p>\n<p>Comme dit pr\u00e9c\u00e9demment, il est pr\u00e9f\u00e9rable d&rsquo;optimiser l&rsquo;image au moment du t\u00e9l\u00e9chargement. Nous avons termin\u00e9 avec le code de t\u00e9l\u00e9chargement d&rsquo;une image. Maintenant, nous devons le compresser. Je vais couvrir 2 services \u2013 <a href=\"https:\/\/tinypng.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">TinyPNG<\/a> et <a href=\"https:\/\/resmush.it\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">reSmush.it<\/a> qui fournit les API pour compresser les images \u00e0 la vol\u00e9e. Voyons-les un par un.<\/p>\n<h3>Compresser des images avec TinyPNG dans Laravel<\/h3>\n<p>Pour compresser des images \u00e0 l&rsquo;aide de l&rsquo;API TinyPNG, vous devez obtenir votre <a href=\"https:\/\/tinypng.com\/developers\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cl\u00e9 API<\/a>. Le processus est simple. Enregistrez votre adresse e-mail avec eux et ils vous enverront votre cl\u00e9 de d\u00e9veloppeur.<\/p>\n<p>Une fois que vous obtenez la cl\u00e9 API, ajoutez-la dans le <code>.env<\/code>fichier.<\/p>\n<p>Apr\u00e8s cela, installez un package TinyPNG \u00e0 l&rsquo;aide de la commande\u00a0:<\/p>\n<pre><code>composer require tinify\/tinify<\/code><\/pre>\n<p>Lors de l&rsquo;installation du package, nous devons \u00e9crire un code qui compresse l&rsquo;image t\u00e9l\u00e9charg\u00e9e \u00e0 l&rsquo;aide de TinyPNG.<\/p>\n<p>\u00c9crivez un code de compression juste en dessous de la ligne qui t\u00e9l\u00e9charge l&rsquo;image.<\/p>\n<pre><code>\/\/Compress Image Code Here\n$filepath = public_path('storage\/profile_images\/'.$filenametostore);\n\u00a0\ntry {\n\u00a0\u00a0\u00a0\u00a0TinifysetKey(env(\"TINIFY_API_KEY\"));\n\u00a0\u00a0\u00a0\u00a0$source = TinifyfromFile($filepath);\n\u00a0\u00a0\u00a0\u00a0$source-&gt;toFile($filepath);\n} catch(TinifyAccountException $e) {\n\u00a0\u00a0\u00a0\u00a0\/\/ Verify your API key and account limit.\n\u00a0\u00a0\u00a0\u00a0return redirect('ROUTE_HERE')-&gt;with('error', $e-&gt;getMessage());\n} catch(TinifyClientException $e) {\n\u00a0\u00a0\u00a0\u00a0\/\/ Check your source image and request options.\n\u00a0\u00a0\u00a0\u00a0return redirect('ROUTE_HERE')-&gt;with('error', $e-&gt;getMessage());\n} catch(TinifyServerException $e) {\n\u00a0\u00a0\u00a0\u00a0\/\/ Temporary issue with the Tinify API.\n\u00a0\u00a0\u00a0\u00a0return redirect('ROUTE_HERE')-&gt;with('error', $e-&gt;getMessage());\n} catch(TinifyConnectionException $e) {\n\u00a0\u00a0\u00a0\u00a0\/\/ A network connection error occurred.\n\u00a0\u00a0\u00a0\u00a0return redirect('ROUTE_HERE')-&gt;with('error', $e-&gt;getMessage());\n} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\/\/ Something else went wrong, unrelated to the Tinify API.\n\u00a0\u00a0\u00a0\u00a0return redirect('ROUTE_HERE')-&gt;with('error', $e-&gt;getMessage());\n}<\/code><\/pre>\n<p>Le code ci-dessus prend une image du r\u00e9pertoire t\u00e9l\u00e9charg\u00e9, l&rsquo;envoie au serveur TinyPNG pour compression, et apr\u00e8s avoir re\u00e7u une r\u00e9ponse, stocke l&rsquo;image compress\u00e9e dans le m\u00eame r\u00e9pertoire.<\/p>\n<p>Ce processus s&rsquo;ex\u00e9cute en arri\u00e8re-plan. Vous n&rsquo;avez pas \u00e0 vous soucier de la fa\u00e7on dont l&rsquo;image va au serveur TinyPNG, de la fa\u00e7on dont elle re\u00e7oit la r\u00e9ponse de l&rsquo;API. La biblioth\u00e8que TinyPNG effectue toutes les t\u00e2ches pour vous.<\/p>\n<p>Essayez de t\u00e9l\u00e9charger l&rsquo;image maintenant et vous devriez voir votre image se compresser.<\/p>\n<h3>Compresser des images \u00e0 l&rsquo;aide de reSmush.it dans Laravel<\/h3>\n<p>TinyPNG fonctionne bien mais il a une limite d&rsquo;optimisation de 500 images gratuites par mois. Si vous souhaitez compresser plus de 500 images, vous devez les payer. Alternativement, les utilisateurs peuvent choisir un service gratuit de reSmush.it pour la compression d&rsquo;images. Au moment de la r\u00e9daction de cet article, reSmush.it compresse plus de 7 milliards d&rsquo;images. Cela suffit \u00e0 dire sur la popularit\u00e9 de ce service.<\/p>\n<p>Alors, \u00e9crivez le code ci-dessous qui compresse les images en utilisant reSmush.it dans Laravel.<\/p>\n<pre><code>\/\/Compress Image Code Here\n$filepath = public_path('storage\/profile_images\/'.$filenametostore);\n$mime = mime_content_type($filepath);\n$output = new CURLFile($filepath, $mime, $filenametostore);\n$data = [\"files\" =&gt; $output];\n\u00a0\n$ch = curl_init();\ncurl_setopt($ch, CURLOPT_URL, 'http:\/\/api.resmush.it\/?qlty=80');\ncurl_setopt($ch, CURLOPT_POST,1);\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\ncurl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);\ncurl_setopt($ch, CURLOPT_POSTFIELDS, $data);\n$result = curl_exec($ch);\nif (curl_errno($ch)) {\n\u00a0\u00a0\u00a0\u00a0$result = curl_error($ch);\n}\ncurl_close ($ch);\n\u00a0\n$arr_result = json_decode($result);\n\u00a0\n\/\/ store the optimized version of the image\n$ch = curl_init($arr_result-&gt;dest);\n$fp = fopen($filepath, 'wb');\ncurl_setopt($ch, CURLOPT_FILE, $fp);\ncurl_setopt($ch, CURLOPT_HEADER, 0);\ncurl_exec($ch);\ncurl_close($ch);\nfclose($fp);<\/code><\/pre>\n<p>J&rsquo;ai pass\u00e9 la valeur de qualit\u00e9 \u00e0 80 <code>?qlty=80<\/code>dans le code ci-dessus. Vous pouvez jouer en passant diff\u00e9rentes valeurs de qualit\u00e9.<\/p>\n<p>J&rsquo;esp\u00e8re que vous comprenez comment t\u00e9l\u00e9charger et compresser des images dans Laravel. 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\/tinypng-compresse-des-images-a-l-aide-de-php\/\" title=\"TinyPNG compresse des images \u00e0 l&#039;aide de PHP\">TinyPNG compresse des images \u00e0 l&rsquo;aide de PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/optimisation-d-image-a-l-aide-du-package-artisansweb-image-optimizer\/\" title=\"Optimisation d&#039;image \u00e0 l&#039;aide du package artisansweb\/image-optimizer\">Optimisation d&rsquo;image \u00e0 l&rsquo;aide du package artisansweb\/image-optimizer<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/redimensionner-l-image-en-php-a-l-aide-de-la-bibliotheque-d-images-d-intervention\/\" title=\"Redimensionner l&#039;image en PHP \u00e0 l&#039;aide de la biblioth\u00e8que d&#039;images d&#039;intervention\">Redimensionner l&rsquo;image en PHP \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>\u00c9tudions comment t\u00e9l\u00e9charger et compresser des images dans Laravel. Nous utilisons la biblioth\u00e8que TinyPNG pour compresser les images t\u00e9l\u00e9charg\u00e9es. De cette fa\u00e7on, nous pouvons am\u00e9liorer<\/p>\n","protected":false},"author":1,"featured_media":21621,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[205,497],"tags":[844],"class_list":["post-25096","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-elementor-4","category-laravel2-4","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/25096","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=25096"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/25096\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media\/21621"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media?parent=25096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/categories?post=25096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/tags?post=25096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}