Изменение размера изображения

Функция уменьшения/увеличения размера картинки.

/**
	Функция изменяет размер изображения,
	 если передать вместо ширины/высоты 0, то размер изменится пропорционально

	@param string полный путь к файлу изображения
	@param string путь для нового изображения
	@param int    ширина
	@param int    высота
	@param string цвет фона, если (останется свободное место)
	@param int    качество на выходе в %
	
	@return boolean */
function img_resize($src, $out, $width, $height, $color = 0xFFFFFF, $quality = 100) 
{
    // Если файл не существует
    if (!file_exists($src)) {
        return false;  
    }

    // Получаем массив с информацией о размере и формате картинки (mime)
    $size = getimagesize($src);

    // Исходя из формата (mime) картинки, узнаем с каким форматом имеем дело
    $format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
    //и какую функцию использовать для ее создания
    $picfunc = 'imagecreatefrom'.$format;

    // Вычилсить горизонтальное соотношение
    $gor = $width  / $size[0];
    // Вертикальное соотношение
    $ver = $height / $size[1];  

    // Если не задана высота, вычислить изходя из ширины, пропорционально
    if ($height == 0) {
        $ver = $gor;
        $height  = $ver * $size[1];
    }
	// Так же если не задана ширина
	elseif ($width == 0) {
        $gor = $ver;
        $width   = $gor * $size[0];
    }

    // Формируем размер изображения
    $ratio   = min($gor, $ver);
    // Нужно ли пропорциональное преобразование
    if ($gor == $ratio)
        $use_gor = true;
    else
        $use_gor = false;

    $new_width   = $use_gor  ? $width  : floor($size[0] * $ratio);
    $new_height  = !$use_gor ? $height : floor($size[1] * $ratio);
    $new_left    = $use_gor  ? 0 : floor(($width - $new_width)   / 2);
    $new_top     = !$use_gor ? 0 : floor(($height - $new_height) / 2);

    $picsrc  = $picfunc($src);
    // Создание изображения в памяти
    $picout = imagecreatetruecolor($width, $height);

    // Заполнение цветом
    imagefill($picout, 0, 0, $color);
    // Нанесение старого на новое
    imagecopyresampled($picout, $picsrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);

    // Создание файла изображения
    imagejpeg($picout, $out, $quality);

    // Очистка памяти
    imagedestroy($picsrc);
    imagedestroy($picout);

    return true;
}



Раздел: Кодинг Рубрика: PHP


Добавлена: 06-03-2009 | Изменена: 12-03-2010 | Пользователем: stanislav_kuzmin | Просмотров: 9384

Комментарии

Nira 23-09-2009 18:06
Хорошая функция, жаль не видно правого края (
admin 24-09-2009 02:01
Извиняюсь за это не удобство, в ближайшее время поправлю, а пока можно скопировать из исходного кода страницы (ctrl+U).
Peter182 15-11-2009 11:00

Может функция и хороша. Но почему же тогда у меня ошибку выдаёт?

Ругается на строчку $new_width = $use_gor ? $width : floor($size[0] * $ratio); и далее на весь блок. То есть парсер на все четыре строчки ругается.

RAMe0 20-01-2010 01:12
Спасибо за скрипт!
Для вывода скриптов, рекомендую тебе SyntaxHighlighter (http://alexgorbatchev.com/)
Сам его использую. проблем с переполнением области видимости не было, к тому же есть нумерация строк. А чтобы скопировать исходный текст, есть отдельное меню, появляющееся в правом верхнем углу поля с подсвеченым текстом.
admin 12-03-2010 05:05
ecolora, спасибо. Обновил.
ecolora 12-03-2010 03:12
После $use_gor = false не хватает ;
А в остальном всё работает! Спасибо Вам огромное!
vikentii 06-04-2010 06:56

Хороший скрипт, спасибо.

Но у меня одна проблема, на локальной сервере работает, а на реальном нет, неогу понять в чем дело. Настройки GD библиотеки одинаковые.

Jack Jones 21-07-2010 02:51
Отличный скрипт! Все пахает, с первого раза завелась. Спасибо тебе чувак!!!


Оставить комментарий



капча

Комментарий будет опубликован после проверки модератором

Для подсветки синтаксиса используйте тэги:
<pre><code class="синтаксис" >код</code></pre>
Подерживаются следующие: cpp php javascript sql html-xml css ini

поисковая раскрутка сайтов быстрый результат

Рубрики