Optimiser les images téléchargées avec php (jpeg)
lors de L'exécution de Page Speed dans Google Chrome il suggère d'optimiser/compresser les images. Ces images sont principalement téléchargées par les utilisateurs, donc je devrais les optimiser pendant le téléchargement. Ce que je trouve à propos de l'optimisation des images jpeg avec php, c'est quelque chose comme utiliser les fonctions GD suivantes:
getimagesize()
imagecreatefromjpeg()
imagejpeg()
depuis que je redimensionne les images après le téléchargement je tire déjà l'image à travers ces fonctions et en plus j'utilise imagecopyresampled()
après imagecreatefromjpeg()
pour le redimensionner.
mais alors, Page Speed me dit toujours que ces images peuvent être optimisées. Comment réaliser cette optimisation dans un script php? Définir la qualité inférieure dans imagejpeg() ne fait pas de différence.
4 réponses
La fonction imagejpeg est l'endroit où vous attribuer la qualité. Si vous mettez déjà cette valeur à une valeur appropriée, alors il n'y a rien d'autre que vous puissiez faire.
page speed considère probablement toutes les images au-dessus d'une certaine taille comme "nécessitant une compression", peut-être juste s'assurer qu'elles sont toutes aussi petites que raisonnables (en termes de hauteur/largeur) et compressées.
vous pouvez en savoir plus sur la vitesse de page et ses suggestions de compression sur les docs pagespeed http://code.google.com/speed/page-speed/docs/payload.html#CompressImages qui décrit quelques-unes des techniques / outils pour compresser de façon appropriée.
je viens juste de lire la suivante:
plusieurs outils sont disponibles qui performent plus loin, sans perte compression sur les fichiers JPEG et PNG, sans effet sur la qualité de l'image. Pour JPEG, nous recommandons jpegtran ou jpegoptim (disponible sur Linux seulement; exécutez avec l'option -- strip-all). Pour PNG, nous recommandons OptiPNG ou PNGOUT.
alors peut-être (si vous voulez vraiment vous en tenir aux suggestions de Google) vous pourriez utiliser PHP exec
pour exécuter l'un de ces outils sur les fichiers tels qu'ils sont téléchargés.
compresser avec php, vous procédez de la manière suivante (on dirait que vous le faites déjà ça):
Où $source_url
est l'image, $destination_url
est l'emplacement où enregistrer et $quality
est un nombre entre 1 et 100 choisir combien de compression jpeg à utiliser.
function compressImage($source_url, $destination_url, $quality) {
$info = getimagesize($source_url);
if ($info['mime'] == 'image/jpeg') $image = imagecreatefromjpeg($source_url);
elseif ($info['mime'] == 'image/gif') $image = imagecreatefromgif($source_url);
elseif ($info['mime'] == 'image/png') $image = imagecreatefrompng($source_url);
//save file
imagejpeg($image, $destination_url, $quality);
//return destination file
return $destination_url;
}
fonction réparée:
function compressImage($source_url, $destination_url, $quality) {
//$quality :: 0 - 100
if( $destination_url == NULL || $destination_url == "" ) $destination_url = $source_url;
$info = getimagesize($source_url);
if ($info['mime'] == 'image/jpeg' || $info['mime'] == 'image/jpg')
{
$image = imagecreatefromjpeg($source_url);
//save file
//ranges from 0 (worst quality, smaller file) to 100 (best quality, biggest file). The default is the default IJG quality value (about 75).
imagejpeg($image, $destination_url, $quality);
//Free up memory
imagedestroy($image);
}
elseif ($info['mime'] == 'image/png')
{
$image = imagecreatefrompng($source_url);
imageAlphaBlending($image, true);
imageSaveAlpha($image, true);
/* chang to png quality */
$png_quality = 9 - round(($quality / 100 ) * 9 );
imagePng($image, $destination_url, $png_quality);//Compression level: from 0 (no compression) to 9(full compression).
//Free up memory
imagedestroy($image);
}else
return FALSE;
return $destination_url;
}
Vous pouvez utiliser la classe Imagick pour cela. Envisagez la fonction suivante:
<?php
function resizeImage($imagePath, $width, $height, $blur, $filterType = Imagick::FILTER_LANCZOS, $bestFit = false)
{
//The blur factor where > 1 is blurry, < 1 is sharp.
$img= new \Imagick(realpath($imagePath));
$img->setCompression(Imagick::COMPRESSION_JPEG);
$img->setCompressionQuality(40);
$img->stripImage();
$img->resizeImage($width, $height, $filterType, $blur, $bestFit);
$img->writeImage();
}
?>
en savoir plus sur la façon de redimensionner les images avec Imagick at:
http://php.net/manual/en/class.imagick.php
http://php.net/manual/en/imagick.resizeimage.php
http://php.net/manual/en/imagick.constants.php#imagick.constants.filters
il est très important d'optimiser vos images. Plusieurs plateformes CMS ont modules ou plugins pour préformer ce processus. Cependant, si vous le programmez vous-même, il y a un tutoriel php complet situé à cette page https://a1websitepro.com/optimize-images-with-php-in-a-directory-on-your-server/ on vous montrera comment mettre en œuvre le imagecreatefromjpeg($SrcImage);
et imagecreatefrompng($SrcImage);
et imagecreatefromgif($SrcImage);
il y a des instructions écrites et vidéo sur la page.