Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр 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($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;
}

?>


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

  Ответить  
 
 автор: 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 Яндекс.Метрика Яндекс цитирования