PHP

Пропорциональное уменьшение размеров изображения

 	<?php
 	 
 	/** Универсальный ресайз картинок
 	  *
 	  * Функция позволяет копировать изображение,
 	  * оставляя его исходные характеристики или
 	  * изменяя его размер и/или качество.
 	  * При изменении размера сохраняются пропорции.
 	  *
 	  * Функция умеет работать с изображениями
 	  * следующих форматов: JPG, PNG, GIF.
 	  *
 	  * Параметры:
 	  * @ $from     - путь к изображению, над которым будут выполняться операции
 	  * @ $to       - путь к результирующему изображению
 	  * @ $maxwidth - максимальная ширина изображения
 	  * @ $maxheight    - максимальная высота изображения
 	  * @ $quality  - качество картинки (0..100) (для JPG и PNG)
 	  *
	  * Возвращаемые значения:
 	  * false   - во время выполнения произошла ошибка
 	  * true    - функция выполнилась успешно и без ошибок
 	  *
 	  * Автор:
 	  * @name   Валерий 'Figaroo' Киркиж
 	  * @url    http://blogfigaroo.ru/
 	  * @email  mail@figaroo.ru
 	*/
 	function figaroo_resize_image ($from, $to, $maxwidth, $maxheight, $quality = 80) {
 	        // защита от Null-байт уязвимости PHP
 	        $from = preg_replace('/\0/uis', '', $from);
 	        $to = preg_replace('/\0/uis', '', $to);
 	 
 	        // информация об изображении
 	        $imageinfo = @getimagesize($from);
 	        // если получить информацию не удалось - ошибка
 	        if (!$imageinfo) return false;
 	        // получаем параметры изображения
 	        $width = $imageinfo[0];     // ширина
 	        $height = $imageinfo[1];    // высота
 	        $format = $imageinfo[2];    // ID формата (число)
 	        $mime = $imageinfo['mime']; // mime-тип
 	 
 	        // определяем формат и создаём изображения
 	        switch ($format) {
 	            case 2: $img = imagecreatefromjpeg($from); break;   // jpg
	            case 3: $img = imagecreatefrompng($from); break;    // png
 	            case 1: $img = imagecreatefromgif($from); break;    // gif
 	            default: return false; break;
 	        }
 	        // если создать изображение не удалось - ошибка
 	        if (!$img) return false;
 	 
 	        // меняем размеры изображения
 	        $newwidth = $newheight = 0;
 	        // требуется квадратная картинка
 	        if ($maxwidth == $maxheight) {
 	            // размеры картинки больше по X и по Y
 	            if ($width > $maxwidth && $height > $maxheight) {
 	                // пропорции картинки одинаковы
 	                if ($width == $height) {
 	                    $newwidth = $maxwidth;
 	                    $newheight = $maxheight;
 	                }
 	                // ширина больше
 	                elseif ($width > $height) {
 	                    $newwidth = $maxwidth;
 	                    $newheight = intval(((float)$newwidth / (float)$width) * $height);
 	                }
 	                // высота больше
 	                else {
 	                    $newheight = $maxheight;
 	                    $newwidth = intval(((float)$newheight / (float)$height) * $width);
 	                }
 	            }
 	            // размеры картинки больше только по X
 	            elseif ($width > $maxwidth) {
 	                $newwidth = $maxwidth;
 	                $newheight = intval(((float)$newwidth / (float)$width) * $height);
 	            }
 	            // размеры картинки больше только по Y
 	            elseif ($height > $maxheight) {
 	                $newheight = $maxheight;
 	                $newwidth = intval(((float)$newheight / (float)$height) * $width);
 	            }
 	            // в остальных случаях ничего менять не надо
 	            else {
 	                $newwidth = $width;
 	                $newheight = $height;
 	            }
 	        }
 	        // требуется горизонтальная картинка
 	        elseif ($maxwidth > $maxheight) {
 	            // размеры картинки больше по X и по Y
 	            if ($width > $maxwidth && $height > $maxheight) {
 	                // ширина больше
 	                if ($width > $height) {
 	                    $newwidth = $maxwidth;
 	                    $newheight = intval(((float)$newwidth / (float)$width) * $height);
 	                }
 	                // высота больше или равна ширине
 	                else {
 	                    $newheight = $maxheight;
 	                    $newwidth = intval(((float)$newheight / (float)$height) * $width);
 	                }
 	            }
	            // размеры картинки больше только по X
 	            elseif ($width > $maxwidth) {
 	                $newwidth = $maxwidth;
 	                $newheight = intval(((float)$newwidth / (float)$width) * $height);
 	            }
 	            // размеры картинки больше только по Y
 	            elseif ($height > $maxheight) {
 	                $newheight = $maxheight;
 	                $newwidth = intval(((float)$newheight / (float)$height) * $width);
 	            }
	            // в остальных случаях ничего менять не надо
 	            else {
	                $newwidth = $width;
 	                $newheight = $height;
 	            }
 	        }
	        // требуется вертикальная картинка
 	        elseif ($maxwidth < $maxheight) {
 	            // размеры картинки больше по X и по Y
 	            if ($width > $maxwidth && $height > $maxheight) {
 	                // ширина больше или равна высоте
 	                if ($width >= $height) {
 	                    $newwidth = $maxwidth;
 	                    $newheight = intval(((float)$newwidth / (float)$width) * $height);
 	                }
 	                // высота больше
 	                else {
 	                    $newheight = $maxheight;
 	                    $newwidth = intval(((float)$newheight / (float)$height) * $width);
 	                }
 	            }
 	            // размеры картинки больше только по X
 	            elseif ($width > $maxwidth) {
 	                $newwidth = $maxwidth;
 	                $newheight = intval(((float)$newwidth / (float)$width) * $height);
 	            }
 	            // размеры картинки больше только по Y
 	            elseif ($height > $maxheight) {
 	                $newheight = $maxheight;
 	                $newwidth = intval(((float)$newheight / (float)$height) * $width);
 	            }
 	            // в остальных случаях ничего менять не надо
 	            else {
 	                $newwidth = $width;
 	                $newheight = $height;
 	            }
 	        }
 	 
	        // если изменений над картинкой производить не надо - просто копируем её
 	        if ($newwidth == $width && $newheight == $height && $quality == 80) {
 	            if (copy($from, $to)) return true;
 	            else return false;
 	        }
 	 
 	        // создаём новое изображение
 	        $new = imagecreatetruecolor($newwidth, $newheight);
 	        $black = imagecolorallocate($new, 0, 0, 0);
 	        $white = imagecolorallocate($new, 255, 255, 255);
 	        // копируем старое в новое с учётом новых размеров
 	        imagefilledrectangle($new, 0, 0, $newwidth - 1, $newheight - 1, $white);
 	        //imagecolortransparent($new, $white);
 	        imagecopyresampled($new, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
 	        // создаём файл с новым изображением
 	        switch ($format) {
 	            case 2: // jpg
	                if ($quality < 0) $quality = 0;
 	                if ($quality > 100) $quality = 100;
 	                imagejpeg($new, $to, $quality);
 	            break;
 	            case 3: // png
 	                $quality = intval($quality * 9 / 100);
 	                if ($quality < 0) $quality = 0;
 	                if ($quality > 9) $quality = 9;
 	                imagepng($new, $to, $quality);
 	            break;
 	            case 1: // gif
 	                imagegif($new, $to);
 	            break;
 	        }
 	        return true;
 	}
 	 
 	?>
Добавлено: 16 Августа 2013 08:40:16 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...