Создание миниатюры
1-ый способ: PHP 5.5
В PHP 5.5 появилась функция imagescale()
, которая изменяет размеры картинки. До этого приходилось вручную узнавать размеры картинки для миниатюры (указано во втором примере).
function image_create($image_path) { $ext = pathinfo($image_path, PATHINFO_EXTENSION); switch($ext) { case 'gif': $im = imagecreatefromgif($image_path); break; case 'jpg': case 'jpeg': $im = imagecreatefromjpeg($image_path); break; case 'png': $im = imagecreatefrompng($image_path); break; case 'webp': $im = imagecreatefromwebp($image_path); break; default: throw new Exception('Неверный формат файла'); } unset($ext); return $im; } function thumb($image_source, $save_as, $width) { // Проверка на наличие изображений if (!file_exists($image_source)) { throw new Exception('Изображение '.$image_source.' не найдено'); } $image = image_create($image_source); $thumb = imagescale($image, $width); // сохранение прозрачности (для PNG и GIF) imagealphablending($thumb, false); imagesavealpha($thumb, true); // сохранение картинки imagepng($thumb, $save_as); // освобождение памяти imagedestroy($image); imagedestroy($thumb); } // создание миниатюры шириной в 200 пикселей thumb('image.png', 'thumbname.png', 200);
2-ой способ: до PHP 5.5
Миниатюра создаётся через функцию imagecopyresampled()
, которая уменьшает картинку до указанных размеров.
function image_create($image_path) { $ext = pathinfo($image_path, PATHINFO_EXTENSION); switch($ext) { case 'gif': $im = imagecreatefromgif($image_path); break; case 'jpg': case 'jpeg': $im = imagecreatefromjpeg($image_path); break; case 'png': $im = imagecreatefrompng($image_path); break; case 'webp': $im = imagecreatefromwebp($image_path); break; default: throw new Exception('Неверный формат файла'); } unset($ext); return $im; } function thumb($image_source, $save_as, $width) { // Проверка на наличие изображений if (!file_exists($image_source)) { throw new Exception('Изображение '.$image_source.' не найдено'); } $image = image_create($image_source); list($im_size['width'], $im_size['height']) = getimagesize($image_source); $thumb_size['width'] = $width; $thumb_size['height'] = floor($im_size['height'] * ($thumb_size['width'] / $im_size['width'])); $thumb = imagecreatetruecolor($thumb_size['width'], $thumb_size['height']); // сохранение прозрачности (для PNG и GIF) imagealphablending($thumb, false); imagesavealpha($thumb, true); // создание миниатюры imagecopyresampled($thumb, $image, 0, 0, 0, 0, $thumb_size['width'], $thumb_size['height'], $im_size['width'], $im_size['height']); // сохранение картинки imagepng($thumb, $save_as); // освобождение памяти imagedestroy($image); imagedestroy($thumb); } // создание миниатюры шириной в 200 пикселей thumb('image.png', 'thumbname.png', 200);
Также есть функция imagecopyresized()
, которая работает также, как и imagecopyresampled()
, только сохраняет картинки немного в худшем качестве.
Поддержать автора
Все статьи создаются и поддерживаются одним человеком,
если вам нравится контент, вы можете поддержать автора сайта