масштабирование/обрезание пикчи php - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB93.4409
BTC/USD64412.9489
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 21.05.2010, 14:31   #1
imgreen
Senior Member
 
Аватар для imgreen
 
Регистрация: 15.11.2008
Сообщений: 13,230
Бабло: $247845891
По умолчанию масштабирование/обрезание пикчи php

Нужно сделать изменение размера изображения до определенного фиксированного путем масштабирования и обрезания лишних частей. Может есть у кого готовая функция?
imgreen вне форума  
Старый 21.05.2010, 16:15   #2
dveredel
Читатель
 
Аватар для dveredel
 
Регистрация: 23.11.2007
Сообщений: 420
Бабло: $48745
По умолчанию

Вот набросал вариант, когда необходимо "вписать" картинку в квадрат нужного размера по меньшей стороне картинки с центрированием и обрезанием выступающих краев большей стороны.
PHP код:
$SIZE 200;    // Размер стороны квадрата
$IMGFILE 'path/to/img.jpeg';

list(
$width$height) = getimagesize($IMGFILE);
$xk $yk 0;
if(
$width $height) {
    
$src_size $height;
    
$xk = ($width $height) / 2;
} else {
    
$src_size $width;
    
$yk = ($height $width) / 2;
}

$img1 imagecreatefromjpeg($IMGFILE);
$img2 imagecreatetruecolor($SIZE$SIZE);

imagecopyresampled($img2$img100$xk$yk$SIZE$SIZE$src_size$src_size);

// Тут можно вывести, а можно и сохранить...
header('Content-type: image/jpeg');
imagejpeg($img2); 
dveredel вне форума  
Старый 21.05.2010, 16:16   #3
wleader
Nothing can stop me now
 
Регистрация: 09.05.2007
Адрес: Ukraine
Сообщений: 44
Бабло: $7885
По умолчанию

Вот
_ttp://shiftingpixel.com/2008/03/03/smart-image-resizer/
wleader вне форума  
Старый 21.05.2010, 16:18   #4
imgreen
Senior Member
 
Аватар для imgreen
 
Регистрация: 15.11.2008
Сообщений: 13,230
Бабло: $247845891
ТС -->
автор темы ТС По умолчанию

спасибо
а если не только квадрат, намного сложнее будет?

Цитата:
Вот
_ttp://shiftingpixel.com/2008/03/03/smart-image-resizer/
ну тут скрипт каждый раз будет срабатывать... не будет неоправданно большой нагрузки?
imgreen вне форума  
Старый 21.05.2010, 16:41   #5
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

imagecopyresampled - херово работает при уменьшении масштабов, резкость увеличивается. я после нее этим размываю: http://bddl.googlecode.com/svn/trunk...k.function.php

Цитата:
не будет неоправданно большой нагрузки?
конечно изврат, кеш нужен полюбому.
Если что-то оптом редактировать, то лучше imagemagick - мегаизвестная софтина под никс, частенько просили ее использовать вместо php-gd, вызов также из php через exec()
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 21.05.2010, 16:47   #6
imgreen
Senior Member
 
Аватар для imgreen
 
Регистрация: 15.11.2008
Сообщений: 13,230
Бабло: $247845891
ТС -->
автор темы ТС По умолчанию

ну там есть какой-то кеш
без кеша конечно вообще тупо
imgreen вне форума  
Старый 21.05.2010, 17:02   #7
wleader
Nothing can stop me now
 
Регистрация: 09.05.2007
Адрес: Ukraine
Сообщений: 44
Бабло: $7885
По умолчанию

да, там кеш есть
wleader вне форума  
Старый 21.05.2010, 17:04   #8
dveredel
Читатель
 
Аватар для dveredel
 
Регистрация: 23.11.2007
Сообщений: 420
Бабло: $48745
По умолчанию

Цитата:
Сообщение от chesser Посмотреть сообщение
Если что-то оптом редактировать, то лучше imagemagick - мегаизвестная софтина под никс, частенько просили ее использовать вместо php-gd, вызов также из php через exec()
Через ехес медленно очень (тестил), надо нативный экстеншн использовать - imagick.
dveredel вне форума  
Старый 21.05.2010, 17:09   #9
kavopero
Senior Member
 
Аватар для kavopero
 
Регистрация: 27.10.2008
Сообщений: 758
Бабло: $94811
Отправить сообщение для kavopero с помощью ICQ
По умолчанию

Цитата:
Сообщение от imgreen Посмотреть сообщение
Нужно сделать изменение размера изображения до определенного фиксированного путем масштабирования и обрезания лишних частей. Может есть у кого готовая функция?
От сердца отрываю

PHP код:
<?php

/**
 * @author Kavopero
 * @copyright 2009
 */


$dir='C:\\WebServers\\home\\script.com\\www\\gpic\\img\\';
$pics=scandir($dir);
print_r($pics);
$ds=250//ширина нового изображения

for ($w=0;$w<count($pics);$w++)
{
$prefix mt_rand(100,999);
    if (
false !== strpos($pics[$w],'.jpg'))
    {
        
$im = @imagecreatefromjpeg ($dir.$pics[$w]);
        
$size=getimagesize($dir.$pics[$w]);
        
$fac=$size[0]/$size[1];
        if (
$size[0]>$ds$w_dest=$ds;
        else 
$w_dest=$size[0]-10;
        
$h_dest=$w_dest/$fac;
        
$dest imagecreatetruecolor($w_dest,$h_dest);
        
imagecopyresized($dest$im0000$w_dest$h_dest$size[0], $size[1]);
        
imagejpeg($dest,$dir.$prefix.$pics[$w]); 
        
imagedestroy($dest); 
        
imagedestroy($im); 
    }
    elseif (
false !== strpos($pics[$w],'.gif'))
    {
        
$im = @imagecreatefromgif ($dir.$pics[$w]);
        
$size=getimagesize($dir.$pics[$w]);
        
$fac=$size[0]/$size[1];
        if (
$size[0]>$ds$w_dest=$ds;
        else 
$w_dest=$size[0]-10;
        
$h_dest=$w_dest/$fac;
        
$dest imagecreatetruecolor($w_dest,$h_dest);
        
imagecopyresized($dest$im0000$w_dest$h_dest$size[0], $size[1]);
        
imagegif($dest,$dir.$prefix.$pics[$w]); 
        
imagedestroy($dest); 
        
imagedestroy($im); 
    }
    elseif (
false !== strpos($pics[$w],'.png'))
    {
        
$im = @imagecreatefrompng ($dir.$pics[$w]);
        
$size=getimagesize($dir.$pics[$w]);
        
$fac=$size[0]/$size[1];
        if (
$size[0]>$ds$w_dest=$ds;
        else 
$w_dest=$size[0]-10;
        
$h_dest=$w_dest/$fac;
        
$dest imagecreatetruecolor($w_dest,$h_dest);
        
imagecopyresized($dest$im0000$w_dest$h_dest$size[0], $size[1]);
        
imagepng($dest,$dir.$prefix.$pics[$w]); 
        
imagedestroy($dest); 
        
imagedestroy($im); 
    }
}

?>
kavopero вне форума  
Старый 21.05.2010, 17:18   #10
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

Цитата:
Сообщение от dveredel Посмотреть сообщение
Через ехес медленно очень (тестил), надо нативный экстеншн использовать - imagick.
возможно это тормозила связка php<->console, т.е. инициализация exec. И если пускать в exec пачкой, то нормально должно быть. Может еще какие факторы окружающей системы влияли.
Ну смысл тут понятен, а как запускать - это второстепенно.
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума