function compress($source, $destination, $quality) {

$info = getimagesize($source);

if ($info['mime'] == 'image/jpeg')
$image = imagecreatefromjpeg($source);

elseif ($info['mime'] == 'image/gif')
$image = imagecreatefromgif($source);

elseif ($info['mime'] == 'image/png')
$image = imagecreatefrompng($source);

imagejpeg($image, $destination, $quality);

return $destination;
}

$source_img = 'source.jpg';
$destination_img = 'destination .jpg';

$d = compress($source_img, $destination_img, 90);
*stackoverflow dan alıntı

bu fonksiyon bir nebze çözüm olur ama gerçek anlamda performans için CDN kullanman şart

$d = compress($source_img, $destination_img, 90);
90 resim kalitesi bunu düşürerek boyutu daha da küçültebilirsin en uygununu deneme yanılma ile bulabilirsin

kalite isteğe bağlı olup 0'dan (en kötü kalite, en küçük dosya) 100'e (en yüksek kalite, en büyük dosya) kadar bir değer belirtilebilir. Öntanımlı değer, öntanımlı IJG kalite değeridir (yaklaşık 75).