Уменьшение рисунков средствами 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. Если изображение будет иметь размеры больше этих величин, то будет создано изображение с меньшими размерами.
Опубликовано 20 июля 2009 г.
Сайт CMS boxcode.ru представляет
Новая версия скрипта доски объявлений с Яндекс Картами.
Новые возможности: интегрировано несколько систем оплат (в том числе есть и СМС-оплата), мультивалютность, RSS-лента объявлений, сортировка по цене и дате добавления, новый дизайн.
Комментарии к публикации
Всего комментариев: 6
прохожий: Гость | 24.09.2009, 07:23 #
давай ещё статьи про рнр, а то уже всё тут прочитал
Суперадмин: | 24.09.2009, 10:09 #
E-mail: написать сообщение
А про что хотели бы еще почитать? На какую тему?
прохожий: Гость | 04.11.2009, 13:38 #
Интересно как создавать меню графическое с кнопками которые нажимаються как добавлять графику на сайт из картинок и методами пхп.
Суперадмин: | 06.11.2009, 10:41 #
E-mail: написать сообщение
Что-то я не понял вопроса. Напишите, пожалуйста, подробнее и если есть пример - то покажите, будет еще лучше.
прохожий: Филя | 06.02.2010, 23:33 #
Статья хорошая. Хачу еще статьи про сессии и cookies php
прохожий: Гость | 16.02.2011, 02:30 #
Единственно по настоящему рабочай функция из всех что есть в нете. Сенкс. :)
Вход в аккаунт
Новости сайта
  • 13.09.2011
    Создание современных сайтов не обходится без программирования, и на наш сайт www.linedmk.com так же освещает вопросы связанные с программированием на JavaScript и PHP. И поэтому мы поздравляем и вас и себя с этим праздником! :)
  • 19.07.2011
    В скрипте доски объявлений boxcode.ru разработан функционал для приема платежей с помощью систем smscoin.com и www.webmoney.ru. Также можно одновременно использовать несколько платежных систем, при этом пользователи могут выбрать удобный для себя способ оплаты.
  • 11.07.2011
    В новой версии скрипта доски объявлений cms boxcode.ru реализованы новые долгожданные функции: мультивалютность, RSS-лента объявлений, сортировка объявлений по дате и цене. Есть и очень приятное новшество...
  • 02.05.2011
    Разработан функционал для доски объявлений на CMS boxcode.ru для работы с Яндекс картами.
  • 22.03.2011
    Разработана новая версия доски бесплатных объявлений с СМС-оплатой.