Знаю что можно уменьшить размер в пикселях при загрузки фото. А можно ли ещё сжимать фотку при аплоаде до оптимального качества, т.е если взять фотку и сохранить её в фотошопе методом Save for web $ devices то по качеству будет незаметно а по размеру ощутимо в разы.
Все так просто как Вы хотите не будет) но вот, откопал класс.. в детстве писал (вроде бы флопик(c) изначально, но уверять не буду). Он должен делать тхумбы из картинок.. поковыряйся - принцип поймешь. Только сразу предупреждаю, делался он мной 100 лет назад. не смеяться =) PHP: <?php class image { static private $thumb_width = 96; static private $thumb_height = 96; static private $thumb_folder = "/images/thumb/"; static private $thumb_prefix = "small_"; public $id; public $path; public $title; public $width; public $height; public $thumb; function __construct($id, $path, $title, $parrs, $need_thumb = 0) { $parr = json_decode($parrs); $this->id = $id; $this->path = $path; $this->title = $title; $this->type = "image"; $this->width = $parr->width; $this->height = $parr->height; $this->thumb = $need_thumb?(self::cropResizeImage($this->path)):""; } public static function cropResizeImage($src, $width=false, $height=false, $dest=false, $rgb=0xFFFFFF, $quality=100) { if (!$dest) $dest = self::$thumb_folder.self::$thumb_prefix.basename($src); if (file_exists($_SERVER["DOCUMENT_ROOT"].$dest)) return $dest; if (!file_exists($_SERVER["DOCUMENT_ROOT"].$src)) return false; if (!$width) $width = self::$thumb_width; if (!$height) $height = self::$thumb_height; $size = getimagesize($_SERVER["DOCUMENT_ROOT"].$src); if ($size === false) return false; // Определяем исходный формат по MIME-информации, предоставленной // функцией getimagesize, и выбираем соответствующую формату // imagecreatefrom-функцию. $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1)); $icfunc = "imagecreatefrom" . $format; if (!function_exists($icfunc)) return false; $image = $icfunc($_SERVER["DOCUMENT_ROOT"].$src); $image_width = imagesx($image); $image_height = imagesy($image); $proporshn = $image_width / $image_height; if ($image_width > $image_height) { $thumb_width = $width; $thumb_height = $image_height * ($width / $image_width); } else{ $thumb_width = $image_width * ($height / $image_height); $thumb_height = $height; } $thumb_image = imagecreatetruecolor($thumb_width, $thumb_height); imagecopyresampled($thumb_image, $image, 0, 0, 0, 0, $thumb_width, $thumb_height, $image_width, $image_height); $crop_image = imagecreatetruecolor($width, $height); imagecopy($crop_image, $thumb_image, 0, 0, intval(($thumb_width - $width) / 2), intval(($thumb_height - $height) / 2), $width, $height); imagejpeg($thumb_image, $_SERVER["DOCUMENT_ROOT"].$dest, $quality); imagedestroy($crop_image); imagedestroy($thumb_image); return $dest; } } ?>
Готовой аналогии в GD нет. Фотошоп для этого использует математические рассчеты и индивидуальный подход к каждому изображению с возможностью указать используемую палитру. В GD просто функцией ресайза и imagepng/jpeg аналогичной работы не добиться. Можно максимально приблизить, но при этом самостоятельно просчитывать, блюрить, обрабатывать симилиарные сегменты. По мне так речь идет о imagejpeg и никаких мудреных алгоритмах. Если нет, то готового можно не искать.