Форум SAPE.RU

Форум SAPE.RU (http://forum.sape.ru/index.php)
-   Разработка и сопровождение сайтов (http://forum.sape.ru/forumdisplay.php?f=29)
-   -   Ресайз изображений в PHP (http://forum.sape.ru/showthread.php?t=40407)

omnislash 28.10.2009 19:31

Ресайз изображений в PHP
 
Есть такая функция у меня:
PHP код:

function res($image_in$image_out$width_end$height_end$thumb=0) {

    
$jpeg_quality 80;

    if (
strpos(strtolower($image_in),'.jpeg') !== false) {$_ext='jpeg';}
    elseif (
strpos(strtolower($image_in),'.jpg') !== false) {$_ext='jpeg';}
    elseif (
strpos(strtolower($image_in),'.gif') !== false) {$_ext='gif';}
    elseif (
strpos(strtolower($image_in),'.png') !== false) {$_ext='png';}
    else {
$_ext='';}

    if ((
$_ext!='') and (file_exists($image_in))) {
        list(
$_width,$_height) = getimagesize($image_in); //получаем длину и ширину картинки
        
if ($thumb) {
            
$height_end floor($width_end*$_height/$_width); //тут получаем новую высоту
        
}
        if (
$width_end == 1281) {$width_end 1280$height_end 1024;}
        if (
$_width == 1280 && $_height == 1024) {
             if (
$width_end == 178) {$height_end 133;}
             if (
$width_end == 480) {$height_end 300;}
        }
        
$_thumb=imagecreatetruecolor($width_end,$height_end); //создаём новую картинку
        
$_func='imagecreatefrom'.$_ext//определяем по расширению, какую функцию будем юзать
        
$_source=$_func($image_in); //открываем исходную картинку и загоняем её в $source
        
imagecopyresampled($_thumb$_source0000$width_end$height_end$_width$_height);
        
$_func='image'.$_ext//функция для вывода картинки в браузер
        
if ($_func!='imagejpeg') {$_func($_thumb$image_out);} else {$_func($_thumb$image_out$jpeg_quality);} //рисуем картинку

    
}


в итоге выходят превью в зависимости от размера исходного изображения
если изображение 4:3 то получается 178x133, если широкое то 178x111.
Вот хотелось бы чтобы для всех изображений было одинаково скажем 178x133 - подскажите как сделать. Заранее благодарен.

kibergex 28.10.2009 19:41

в imagecopyresampled() замени $width_end и $height_end на высоту и ширину которую хотел бы видеть

omnislash 28.10.2009 19:59

нет - не то - не работает....есть еще варианты?

shadx 28.10.2009 20:05

есть ....
щас вспомню как класс называется ...
_http://www.phpclasses.org/browse/package/2181.html может почти все ...

omnislash 28.10.2009 20:11

shadx, а с тем функционалом что есть в GD - никак??

shadx 28.10.2009 20:37

если нужен фиксированый размер, и без рамок *читай полей*, то придется уже математику вспоминать ...

Есть свой класс, но у меня к нему нету документации ... а эта штука делает тоже самое запросто и задать надо всего несколько параметров.

Добавлено через 1 минуту
Есть еще такой вариант, когда то делал, но с полями.

PHP код:

function img_resize($src$dest$width$height$rgb=0xFFFFFF$proportion=false$quality=100) {
        if(!
file_exists($src)) return false;
        
$size getimagesize($src);
        if(
$size === false) return false;  
        if(
$proportion === true) {
            
$h0 $height;
            
$height = ($width/$size[0])*$size[1];
            if(
$height $h0) { $height $h0$width = ($height/$size[1])*$size[0]; }}
        if(
$width $size[0]) $width $size[0];
        if(
$height $size[1]) $height $size[1];
        
$format strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
        
$icfunc 'imagecreatefrom'.$format;
        if(!
function_exists($icfunc)) return false;
        
$x_ratio $width/$size[0];
        
$y_ratio $height/$size[1];
        
$ratio min($x_ratio$y_ratio);
        
$use_x_ratio = ($x_ratio == $ratio);
        if(
$use_x_ratio) { $new_width $width$new_left 0; }
        else { 
$new_width floor($size[0] * $ratio); $new_left floor(($width $new_width) / 2); }
        if(!
$use_x_ratio) { $new_height $height$new_top 0; }
        else { 
$new_height floor($size[1] * $ratio); $new_top floor(($height $new_height) / 2); }
        
$isrc $icfunc($src);
        
$idest imagecreatetruecolor($width$height);
        if(
is_array($dest)) {
            
$nd explode('.'$src);
            
$ndc count($nd);
            
$nd[$ndc 2] .= $dest[0]; $dest implode('.'$nd); }
        
imagefill($idest00$rgb);
        
imagecopyresampled($idest$isrc$new_left$new_top00$new_width$new_height$size[0], $size[1]);
        
imagejpeg($idest$dest$quality);
        
imagedestroy($isrc);
        
imagedestroy($idest);
        return 
$dest
    } 


Hanapi 28.10.2009 20:42

omnislash, лень разбираться в Вашем коде. Для себя уже давно решил, что изобретать велосипед - дело н****годарное. В Вашем частном случае поможет PHPThumb - там есть все что Вам нужно

omnislash 28.10.2009 20:54

Да уже сам разобрался.))..всем спасибо за содействие

ahsinis 29.10.2009 10:46

Извините, но
PHP код:

    if (strpos(strtolower($image_in),'.jpeg') !== false) {$_ext='jpeg';} 
    elseif (
strpos(strtolower($image_in),'.jpg') !== false) {$_ext='jpeg';} 
    elseif (
strpos(strtolower($image_in),'.gif') !== false) {$_ext='gif';} 
    elseif (
strpos(strtolower($image_in),'.png') !== false) {$_ext='png';} 
    else {
$_ext='';} 

Это жесть!

sashko 29.10.2009 16:34

Цитата:

Сообщение от ahsinis (Сообщение 604556)
Это жесть!

ага, особенно если файл обозвать типа 1.jpeg.gif


Часовой пояс GMT +3, время: 23:52.

Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.