Comment résoudre le problème de l'échec de la compression des images PHP

PHPz
Libérer: 2023-03-24 15:18:02
original
1207 Les gens l'ont consulté

PHP est un langage de programmation Web populaire qui joue également un rôle important dans le domaine du traitement d'images. Bien que PHP soit livré avec de nombreuses fonctions de traitement d'image, dans mon récent projet, j'ai rencontré un problème frustrant : la compression d'image a échoué.

Dans ce projet, je dois compresser les images téléchargées par les utilisateurs à une taille et une qualité spécifiées pour les afficher dans une application Web. Pour y parvenir j'ai utilisé les fonctions de traitement d'image de la librairie PHP GD. Cependant, même si j'ai suivi toutes les meilleures pratiques recommandées, telles que la définition des limites de mémoire, la vérification des formats d'image et l'utilisation des dernières versions de la bibliothèque, je n'ai toujours pas réussi à compresser les images.

Tout d'abord, j'ai essayé d'utiliser la fonction imagejpeg dans le code pour compresser l'image JPEG. Voici le code que j'ai essayé :

<?php
// Load the image
$image = imagecreatefromjpeg(&#39;image.jpg&#39;);

// Resize the image
$resizedImage = imagescale($image, 200);

// Compress and save the image
imagejpeg($resizedImage, &#39;compressed.jpg&#39;, 80);
?>
Copier après la connexion

Même si j'ai essayé différentes qualités de compression, l'image résultante finissait toujours par être plus grande que l'image d'origine, pas plus petite. J'ai essayé différentes versions de la bibliothèque JPEG mais toujours en vain.

Ensuite, j'ai commencé à expérimenter d'autres formats d'image comme PNG et WebP. J'ai utilisé le code suivant pour compresser une image PNG :

<?php
// Load the image
$image = imagecreatefrompng(&#39;image.png&#39;);

// Resize the image
$resizedImage = imagescale($image, 200);

// Compress and save the image
imagepng($resizedImage, &#39;compressed.png&#39;, 9);
?>
Copier après la connexion

Cependant, j'ai à nouveau rencontré le même problème : l'image résultante était plus grande que l'image d'origine.

Enfin, j'ai essayé le format WebP de Google dans l'espoir de réduire la taille de l'image. J'utilise la bibliothèque libwebp et le code suivant pour compresser les images :

<?php
// Load the image
$image = imagecreatefromjpeg(&#39;image.jpg&#39;);

// Resize the image
$resizedImage = imagescale($image, 200);

// Convert the image to WebP format
imagewebp($resizedImage, &#39;compressed.webp&#39;, 80);
?>
Copier après la connexion

Malheureusement, je n'arrive pas à compresser les images avec succès, même en utilisant le format WebP.

Après de nombreuses tentatives, j'ai enfin trouvé la solution. Le problème était que j'utilisais imagescale dans mon code. Cette fonction génère en fait une nouvelle copie de l'image, plutôt que de compresser réellement l'image originale. Par conséquent, l’utilisation de cette fonction entraîne une image résultante plus grande que l’image d’origine. imagescale。这个函数实际上生成了一个新的图像副本,而不是真正的压缩原始图像。因此,使用该函数会导致生成的图像比原始图像更大。

为了解决这个问题,我改用imagecopyresampled函数,该函数可以在不生成新的图像副本的情况下压缩原始图像。以下是我修改后成功的代码:

<?php
// Load the image
$image = imagecreatefromjpeg(&#39;image.jpg&#39;);

// Get the original dimensions of the image
$width = imagesx($image);
$height = imagesy($image);

// Calculate the new dimensions of the image
$newWidth = 200;
$newHeight = $height * ($newWidth / $width);

// Create a new image with the new dimensions
$resizedImage = imagecreatetruecolor($newWidth, $newHeight);

// Copy and resample the original image into the new image
imagecopyresampled($resizedImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

// Compress and save the image
imagejpeg($resizedImage, &#39;compressed.jpg&#39;, 80);
?>
Copier après la connexion

现在,通过使用imagecopyresampled

Pour résoudre ce problème, j'ai plutôt utilisé la fonction imagecopyresampled, qui compresse l'image originale sans générer une nouvelle copie de l'image. Voici le code que j'ai modifié avec succès : 🎜rrreee🎜Maintenant, en utilisant la fonction imagecopyresampled, je peux facilement compresser des images JPEG, PNG et WebP sans échec de compression. J'espère que mon expérience pourra aider d'autres développeurs Web à éviter de rencontrer les mêmes problèmes de traitement d'image. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal