Beim Ausführen von Page Speed in Google Chrome wird empfohlen, die Bilder zu optimieren/zu komprimieren. Diese Bilder werden meistens von Benutzern hochgeladen, daher müsste ich sie beim Hochladen optimieren. Was ich über das Optimieren von JPEG-Bildern mit PHP finde, ist so etwas wie das Verwenden der folgenden Gd-Funktionen:
getimagesize()
imagecreatefromjpeg()
imagejpeg()
Da ich die Bilder nach dem Hochladen in der Größe verändere, ziehe ich das Bild bereits durch diese Funktionen und benutze außerdem imagecopyresampled()
nach imagecreatefromjpeg()
, um die Größe zu ändern.
Andererseits sagt mir Page Speed immer noch, dass diese Bilder optimiert werden können. Wie kann ich diese Optimierung in einem PHP-Skript durchführen? Wenn Sie die Qualität in imagejpeg () niedriger einstellen, ist dies ebenfalls kein Unterschied.
In der Funktion imagejpeg legen Sie die Qualität fest. Wenn Sie dies bereits auf einen geeigneten Wert einstellen, können Sie sonst wenig tun.
Die Seitengeschwindigkeit betrachtet wahrscheinlich alle Bilder, die eine bestimmte Größe überschreiten, als "komprimierungsbedürftig". Stellen Sie möglicherweise sicher, dass sie alle so klein wie vernünftig (in Bezug auf Höhe/Breite) und komprimiert sind.
Weitere Informationen zur Geschwindigkeit der Seite und den entsprechenden Komprimierungsvorschlägen finden Sie in den pagespeed docs http://code.google.com/speed/page-speed/docs/payload.html#CompressImages , in der einige der Techniken/Tools beschrieben werden entsprechend komprimieren.
Ich habe auch gerade folgendes gelesen:
Es stehen mehrere Tools zur Verfügung, die eine weitere Komprimierung von lossless für JPEG- und PNG-Dateien ohne Auswirkung auf die Bildqualität bieten. Für JPEG empfehlen wir jpegtran oder jpegoptim (nur unter Linux verfügbar; Ausführung mit der Option --strip-all). Für PNG empfehlen wir OptiPNG oderPNGOUT.
Wenn Sie sich also wirklich an die Vorschläge von Google halten möchten, können Sie mit PHP exec
eines dieser Tools für Dateien ausführen, wenn diese hochgeladen werden.
Um mit PHP zu komprimieren, machst du Folgendes (klingt, als würdest du das schon tun):
Wo $source_url
das Bild ist, ist $destination_url
der Ort, an dem gespeichert werden soll, und $quality
ist eine Zahl zwischen 1 und 100, die die Anzahl der zu verwendenden JPEG-Komprimierung bestimmt.
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;
}
Reparierte Funktion:
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;
}
Sie können dafür die Imagick-Klasse verwenden. Betrachten Sie die folgende Wrapper-Funktion:
<?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();
}
?>
Weitere Informationen zum Ändern der Bildgröße mit Imagick finden Sie unter:
http://php.net/manual/de/class.imagick.php
http://php.net/manual/de/imagick.resizeimage.phphttp://php.net/manual/de/imagick.constants.php # imagick.constants.filters