Скрипт уменьшения размера изображений на PHP, с масштабированием

Добавлен: 

Скрипт уменьшения размера изображений на PHP, с масштабированием

При создании фото-галереи, сайта или форума, часто возникает задача уменьшения изображения в автоматическом режиме. Например, пользователь загружает изображение большого разрешения, а следовательно его нужно уменьшить.

Именно для этой цели написан представленный ниже скрипт в виде пользовательской функции.

Объявляем функцию:

function images_size($tmp_name, $new_name, $resolution_width, $resolution_height, $max_size){

//проверяем размер файла
$image_size = filesize($tmp_name);
$image_size = floor($image_size / '1048576') ;
if($image_size <= $max_size) {

$params = getimagesize($tmp_name) ;
//проверяем ширину и высоту, нужно ли обрезание
if($params['0'] > $resolution_width || $params['1'] > $resolution_height) {
//пишем фото --------->
//получаем нужные переменные
switch ($params['2']) {
case 1: $old_img = imagecreatefromgif($tmp_name); break;
case 2: $old_img = imagecreatefromjpeg($tmp_name); break;
case 3: $old_img = imagecreatefrompng($tmp_name); break;
case 6: $old_img = imagecreatefromwbmp($tmp_name); break;
}
//вычисляем новые размеры
if($params['0'] > $params['1']) {
$size = $params['0'] ;
$resolution = $resolution_width;
}
else {
$size = $params['1'] ;
$resolution = $resolution_height;
}
$new_width = floor($params['0'] * $resolution / $size) ;
$new_height = floor($params['1'] * $resolution / $size) ;
//создаём новое изображение
$new_img = imagecreatetruecolor($new_width, $new_height) ;
imagecopyresampled ($new_img, $old_img, 0, 0, 0, 0, $new_width, $new_height, $params['0'], $params['1']) ;

//сохраняем новое изображение----->>>>>>
//определяем тип изображения
switch ($params['2']) {
case 1: $type = '.gif'; break;
case 2: $type = '.jpg'; break;
case 3: $type = '.png'; break;
case 6: $type = '.bmp'; break;
}
//Сохраняем
$new_name = "$new_name$type" ;
switch ($type) {
case '.gif': imagegif($new_img, $new_name); break;
case '.jpg': imagejpeg($new_img, $new_name, 100); break;
case '.bmp': imagejpeg($new_img, $new_name, 100); break;
case '.png': imagepng($new_img, $new_name); break;
}
$message = ('<font class="message">Изображение добавлено</font><br>') ;
imagedestroy($old_img);
}



//если не нужно обрезать-------------------->>>>>>>>>>>>>>>>>>>>>>>
else {
//сохраняем новое изображение----->>>>>>
//определяем тип изображения
switch ($params['2']) {
case 1: $type = '.gif'; break;
case 2: $type = '.jpg'; break;
case 3: $type = '.png'; break;
case 6: $type = '.bmp'; break;
}
//Сохраняем
$new_name = "$new_name$type" ;
copy($tmp_name, $new_name);
$message = ('<font class="message">Изображение добавлено</font><br>') ;
}
}
else $errors = ('<font class="error">Слишком большой размер</font><br>') ;


return($message);
return($errors);
}

Как вы видите, пользовательской функции передаётся 5 параметров:

$tmp_name – полное имя редактируемого изображения

$new_name – полное имя нового изображения, без указывания расширения (оно добавиться автоматически)

$resolution_width – максимальная ширина изображения

$resolution_height – максимальная высота изображения

$max_size – максимальный размер фотографии в Мб

Функция возвращает результат работы.

Вызываем функцию:

$tmp_name = 'upload/image.jpg';
$new_name = 'upload/images/foto'; //без расширения
$resolution_width = '200';
$resolution_height = '300';
$max_size = '10';
$message = images_size($tmp_name, $new_name, $resolution_width, $resolution_height, $max_size);

Обратите внимание, функция поддерживает 4 формата изображений: gif, png, jpg, bmp.

Функция поддерживает масштабирование как по ширине, так и по длинне.

Не забываем оставлять комментарии и отзывы, нам важно ваше мнение!

А еcли статья Вам очень понравилась и Вы считаете, что она достойна внимания. Тогда просто поделитесь ею, в социальной сети:


Интересная рекламма:


Возможно вам будет интересно
Работа через PROXY сервера на PHP с помощью библиотеки CURL Генератор паролей на PHP Функция (скрипт) удаления непустых каталогов на PHP – рекурсивное удаление

Комментарий добавил: Гость - Максим
Добавлен: 25 04 2013 12:02:24
Гость - Максим
Здравствуйте. Воспользовался Вашим скриптом и все бы отлично, только одно но. Фото весом 1.1 мб. и выше не грузит, пишет ошибку. ( пример ошибки при загрузке фото 1.5 мб. Fatal error: Out of memory (allocated 48758784) (tried to allocate 3024 bytes) in /home/slodez31/public_html/admin/aa.php on line 16) Вот эта строка: ( case 2: $old_img = imagecreatefromjpeg($tmp_name); break; )

Комментарий добавил: Гость - tomalko
Добавлен: 30 06 2013 21:34:03
Гость - tomalko
Ошыбка говорит о лимите загружаемого файла - (его размера в байтах)...
Если собственный сервер в php.ini = upload_max_filesize = '' иши здесь.

Или тругими путями:

.htaccess
php_value upload_max_filesize 50M

фаил со скриптом
ini_set("upload_max_filesize", "50M");


Комментарий добавил: Гость - tomalko
Добавлен: 30 06 2013 21:43:31
Гость - tomalko
$old_img = imagecreatefromjpeg($tmp_name); break;
смотри
phpinfo();
?>
Откройте его в браузере и посмотрите выведется ли там информация о GD.
Возможно, что не включена поддержка jpeg в gd. только это наврятли.

Комментарий добавил: Гость - jeka
Добавлен: 25 03 2014 09:00:51
Гость - jeka
PHP функция для уменьшения размера фото на сервере
http://www.wellsait.ru/articles/?url=image_resize

Комментарий добавил: Гость - Вася
Добавлен: 17 08 2014 21:32:39
Гость - Вася
Сделай подсветку кода

Комментарий добавил: Гость - чел
Добавлен: 28 06 2015 17:47:10
Гость - чел
хорошая функция а главное работае

Комментарий добавил: Гость - Абай
Добавлен: 14 03 2016 09:46:08
Гость - Абай
Спасибо, все работает как нужно.

Добавление комментария

Имя -

E-mail -





Читать в Яндекс.Ленте

Яндекс.Метрика


Power by xDroid. Copyright © 2009 - 2016 VEB.name
Копирование информации только с обратной ссылкой
Время генерации страницы : 0.0116 сек.