Уменьшение рисунков средствами PHP

Для того чтобы на PHP можно было обрабатывать рисунки, нужна библиотека GD. У большинства хостинговых компаний она уже установлена, и ее можно использовать. Если же у вас не подключена эта библиотека, то в интернете легко можно прочитать, как ее установить.
Очень часто бывает необходимость уменьшать рисунки, например, при получении изображений от пользователей сайта. Сделать уменьшение рисунков нам поможет PHP. Ниже приведена функция уменьшения рисунков следующих форматов: jpg, gif и png. Функции нужно передать имя исходного рисунка, имя нового рисунка, максимальную ширину, максимальную высоту и качество в процентах для изображений формата jpg. Функция вернет в случае успешной обработки изображения массив с полученными размерами изображения, в случае не успешной обработки изображения функция вернет значение false. Если размеры изображения будут больше указанных, то скрипт уменьшит пропорционально рисунок, чтобы ни одна сторона рисунка не была больше заданных размеров. При этом исходное изображение изменяться не будет, будет создан новый рисунок. Если же размеры исходного рисунка не будут превышать заданных размеров, то изображение просто будет скопировано без всяких изменений.

 

Код

function preob_img($img_file,$img_new,$max_width,$max_height,$quality=85)
{
//$img_file - имя исходного рисунка
//$img_new - имя нового рисунка
//$max_width - максимальная ширина рисунка
//$max_height - максимальная высота рисунка
//$quality - качество в процентах для рисунков в формате jpg, по умолчанию равно 85
$prop_form=$max_width/$max_height;
//проверяем и преобразуем, если надо рисунок
$on_img=false;
$exp=strtolower(substr($img_new,-3,3));
$exp_to_jpeg=strtolower(substr($img_new,-4,4));
$d_img=false;

$is_exp="";

$img_width=0;
$img_height=0;

if ($exp=="jpg" || $exp_to_jpeg=="jpeg")
{
$d_img=ImageCreateFromJpeg($img_file);
$is_exp="jpg";
}
elseif ($exp=="gif")
{
$d_img=ImageCreateFromGif($img_file);
$is_exp="gif";
}
elseif ($exp=="png")
{
$d_img=ImageCreateFromPng($img_file);
$is_exp="png";
}

if (!$d_img) return (false);

$width=ImageSX($d_img);
$height=ImageSY($d_img);
$prop=$width/$height;

$on_edit=false;

$img_width=$width;
$img_height=$height;

if ($prop>=$prop_form)
{
if ($width>$max_width)
{
$k=$width/$max_width;
$new_width=$max_width;
$new_height=floor($height/$k);
$on_edit=true;

$img_width=$new_width;
$img_height=$new_height;
}

}
else
{
if ($height>$max_height)
{
$k=$height/$max_height;
$new_height=$max_height;
$new_width=floor($width/$k);
$on_edit=true;

$img_width=$new_width;
$img_height=$new_height;
}
}

if ($on_edit)
{

$d_new_img=imagecreatetruecolor($new_width,$new_height);
imagecopyresampled($d_new_img, $d_img,0,0,0,0,$new_width,$new_height,$width,$height);
if ($is_exp=="jpg")
{
imagejpeg ($d_new_img,$img_new,$quality);
$on_img=true;
}
elseif ($is_exp=="gif")
{
imagegif($d_new_img,$img_new);
$on_img=true;
}
elseif ($is_exp=="png")
{
imagepng($d_new_img,$img_new);
$on_img=true;
}


}
else
{
if (copy($img_file,$img_new))
{
$on_img=true;
}


}


return ($on_img?array($img_width,$img_height):false);
}

 

Пример использования функции уменьшения изображения.
Код

$name_image="/home/login/web/images/ris.jpg";
$name_new_image="/home/login/web/images/small_ris.jpg ";
if (preob_img($name_image,$name_new_image, 200,300,85))
{
echo ("Изображение успешно обработано!");
}
else
{
echo ("Произошла ошибка при обработки рисунка!");
}

 

В этом примере мы задали максимальную ширину рисунка 200px и максимальную высоту 300px. Если изображение будет иметь размеры больше этих величин, то будет создано изображение с меньшими размерами.
Опубликовано 21 июля 2009 г.
Комментарии к публикации
Всего комментариев: 6
прохожий: Гость | 24.09.2009, 15:23 #
давай ещё статьи про рнр, а то уже всё тут прочитал
Суперадмин: | 24.09.2009, 18:09 #
А про что хотели бы еще почитать? На какую тему?
прохожий: Гость | 04.11.2009, 21:38 #
Интересно как создавать меню графическое с кнопками которые нажимаються как добавлять графику на сайт из картинок и методами пхп.
Суперадмин: | 06.11.2009, 18:41 #
Что-то я не понял вопроса. Напишите, пожалуйста, подробнее и если есть пример - то покажите, будет еще лучше.
прохожий: Филя | 07.02.2010, 07:33 #
Статья хорошая. Хачу еще статьи про сессии и cookies php
прохожий: Гость | 16.02.2011, 10:30 #
Единственно по настоящему рабочай функция из всех что есть в нете. Сенкс. :)
Вход в аккаунт
Новости сайта