Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите с GD (работа с изображениями) разобратся..
 
 автор: AlexDIXI   (13.08.2009 в 19:18)   письмо автору
 
 

Привет всем))

Нашел функцию которая режит картинку. Указываешь процент от изночального размера и он режит ихображение и сохраняет результат.
Проблема в том что мне нужно, принудительно резать изображение например указываем 250 на 200 функция проверяет имет ли изображение данный размер и режит если это возможно не растягивая изображение а просто вырезает с середины 250 на 200 px.

вот пример было:
ххххххх
ххххххх
ххх0ххх
ххххххх
ххххххх

а стало:
ххххх
хх0хх
ххххх



<?php

/** Универсальный ресайз картинок
  *
  * Функция позволяет копировать изображение,
  * оставляя его исходные характеристики или
  * изменяя его размер и/или качество.
  * При изменении размера сохраняются пропорции.
  *
  * Функция умеет работать с изображениями
  * следующих форматов: JPG, PNG, GIF.
  *
  * Параметры:
  * @ $from        - путь к изображению, над которым будут выполняться операции
  * @ $to        - путь к результирующему изображению
  * @ $maxwidth    - максимальная ширина изображения
  * @ $maxheight    - максимальная высота изображения
  * @ $quality    - качество картинки (0..100) (для JPG и PNG)
  *
  * Возвращаемые значения:
  * false    - во время выполнения произошла ошибка
  * true    - функция выполнилась успешно и без ошибок
  *
  * Автор:
  * @name    Валерий 'Figaroo' Киркиж
  * @url    http://figaroo.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($new000);
        
$white imagecolorallocate($new255255255);
        
// копируем старое в новое с учётом новых размеров
        
imagefilledrectangle($new00$newwidth 1$newheight 1$white);
        
//imagecolortransparent($new, $white);
        
imagecopyresampled($new$img0000$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 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;
}

?>


Заранее спасибо ОГРОМНОЕ..

  Ответить  
 
 автор: Trianon   (13.08.2009 в 19:21)   письмо автору
 
   для: AlexDIXI   (13.08.2009 в 19:18)
 

imagecopy()

какое отношение к проблеме имеет этот код?
Не считая того, что и там и здесь про картинки?

  Ответить  
 
 автор: AlexDIXI   (13.08.2009 в 19:51)   письмо автору
 
   для: Trianon   (13.08.2009 в 19:21)
 

прошу помочь пеерписать данную функцию под мой вариант задачи )) Или выложите свою ))

  Ответить  
 
 автор: Саня   (13.08.2009 в 20:33)   письмо автору
 
   для: AlexDIXI   (13.08.2009 в 19:51)
 

Вам нужно именно "Помогите!" или "Сделайте это для меня за спасибо!"?

  Ответить  
 
 автор: AlexDIXI   (13.08.2009 в 21:51)   письмо автору
 
   для: Саня   (13.08.2009 в 20:33)
 

Помогите - если можете, пожалуйста..

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования