[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Готова функция уменьшения фото, но есть непонятка.
ИНСИ
Сделал функцию, которая создает 1 уменьшенную фотку и 2 большего размера. Но почему-то по разному выходит. Допустим, я для 1 фотки поставил 200px на 140px. Если человек будет загружать фотку 200px на 170px, то фотка не уменьшается в высоте, остается как есть. Как мне исправить??

Вот снизу код:
$uploadfile_name = $_FILES['uploadfile']['name'];
$uploadfile_name_arr = explode(".",$uploadfile_name);
$type = end($uploadfile_name_arr);
            
$home_url = 'http://mysite.ru/';
$uploaddir = "uploads/galary/";
$image = $uploaddir . $name_file = basename($home_url."_".date("YmdHis",time()).".".$type); 
$small_image = $uploaddir . $name_file_2 = basename($home_url."_small_".date("YmdHis",time()).".".$type);
$w = 204; $h = 149; $w_2 = 634; $h_2 = 589; $q = 90;

function resizeimg($uploadfile, $type, $image, $small_image, $w, $h, $w_2, $h_2, $q)
{
    $ratio = $w/$h;
    $ratio = $w_2/$h_2;
    
    $size_img = getimagesize($uploadfile);
    $src_ratio = $size_img[0]/$size_img[1];
    
    if($ratio < $src_ratio) $h = $w/$src_ratio;
    else $w = $h * $src_ratio;
    
    if($ratio < $src_ratio) $h_2 = $w_2/$src_ratio;
    else $w_2 = $h_2 * $src_ratio;

    $dest_img = imagecreatetruecolor($w, $h);
    $dest_img_2 = imagecreatetruecolor($w_2, $h_2);

    if ($type == "jpg") { $src_img = imagecreatefromjpeg($uploadfile); }
    else if ($type == "gif") { $src_img = imagecreatefromgif($uploadfile); }
    else if ($type == "png") { $src_img = imagecreatefrompng($uploadfile); }

    if(!imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]));
    if(!imagecopyresampled($dest_img_2, $src_img, 0, 0, 0, 0, $w_2, $h_2, $size_img[0], $size_img[1]));

    if ($type == "jpg") { imagejpeg($dest_img, $image, $q); imagejpeg($dest_img_2, $small_image, $q); }
    else if ($type == "gif") { imagegif($dest_img, $image, $q); imagegif($dest_img_2, $small_image, $q); }
    else if ($type == "png") { imagepng($dest_img, $image, $q); imagepng($dest_img_2, $small_image, $q); }

    imagedestroy($src_img);
    imagedestroy($dest_img);
    imagedestroy($dest_img_2);
}

resizeimg($uploadfile, $type, $image, $small_image, $w, $h, $w_2, $h_2, $q);


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

очень надо =)))



Спустя 9 минут, 35 секунд (22.07.2009 - 16:46) Sylex написал(а):
PHP
<?php
    
/*
        Изменяет размер изображения по задданной ширине или высоте.
        Если какой либо параметр не указан, то он вычисляется пропорционально.
        Если maxsize = true  размер изображения вычисляется как не превышающий,
        иначе изображение строго подгоняется под заданный размер (если необходимо производится обрезка)
    */
    
function Resize($width=0$height=0$maxsize=true$constrain=true)
    {
        if (!
$this->temp_load($img_in)) return false;
        
        
$src_w intval($this->width);
        
$src_h intval($this->height);
        
$set_w abs(intval($width));    
        
$set_h abs(intval($height));  
        
$src_x $src_y 0;
        
        if (
$constrain == false)
        {
            if (
$set_w == 0$set_w 1;
            if (
$set_h == 0$set_h 1;
            
$out_w $set_w$out_h $set_h;
        }
        else
        {
            if (
$set_w == && $set_h == 0) { $set_w $src_w$set_h $src_h; }       
            if (
$set_w && $set_h == 0)  { $set_h ceil($src_h*$set_w/$src_w); }
            if (
$set_h && $set_w == 0)  { $set_w ceil($src_w*$set_h/$src_h); }
            
$prc_w ceil($src_w*$set_h/$src_h);
            
$prc_h ceil($src_h*$set_w/$src_w);
            if (
$prc_h >= $set_h)
            {
                
$out_w $set_w$out_h $prc_h
            }
            else
            {
                
$out_w $prc_w$out_h $set_h;
            }
            if (
$out_w $set_w)
            {
                
$xw ceil($set_w*$src_h/$set_h);
                
$src_x ceil(($src_w-$xw)/2);
            }
            if (
$out_h $set_h)
            {
                
$xh ceil($set_h*$src_w/$set_w);
                
$src_y ceil(($src_h-$xh)/2);
            }
            
            if (
$maxsize == true)
            {
                if (
$out_w $set_w || $out_h $set_h
                {
                    if (
$out_w $set_w
                    {
                        
$h ceil($out_h*$set_w/$out_w); $w $set_w;
                    }
                    if (
$out_h $set_h
                    {
                        
$w ceil($out_w*$set_h/$out_h); $h $set_h;
                    }
                }  
                else
                {
                    
$w $out_w$h $out_h;
                }
                
$src_x $src_y 0;                
                
$set_w $out_w $w;
                
$set_h $out_h $h;
            }
        }

        
        
$img_out imagecreatetruecolor($set_w$set_h);
        
        if (
in_array($this->format, array('gif','png')))
        {
            
$tr imagecolorallocate($img_out255255255);
            
imagefill($img_out,0,0,$tr);
            
imagecolortransparent($img_out$tr);   
            
imagetruecolortopalette($img_outfalse256); 
        }
        else
        {
            for(
$i=0$i<256$i++) imagecolorallocate($img_out$i$i$i); 
        }
        
        
imagecopyresampled($img_out$img_in00$src_x$src_y$out_w$out_h$src_w$src_h);
        
        
$rt $this->temp_save($img_out);
        @
imagedestroy($img_out);
        @
imagedestroy($img_in);        
        
        return 
$rt;    
    }

    function 
Crop($w$h$x$y)
    {
        if (!
$this->temp_load($img_in)) return false;

        
$w=intval($w);
        
$h=intval($h);
        if ((
$w==|| $h==0) || ($w $this->width || $h $this->height)) 
        {
            @
imagedestroy($img_in);
            return 
false;
        }
        
        switch(
strtolower($x))
        {
            case 
"l"$x 0; break;
            case 
"c"$x floor(($this->width-$w)/2); break;
            case 
"r"$x = ($this->width-$w); break;
            default:  
$x intval($x); break;
        }
        
        switch(
strtolower($y))
        {
            case 
"t"$y 0; break;
            case 
"m"$y floor(($this->height-$h)/2); break;
            case 
"b"$y = ($this->height-$h); break;
            default:  
$y intval($y); break;
        }
        
        
//if ((($x+$w+1) > $this->width) || ($y+$h+1) > $this->height) return false;
        
        
$img_out imagecreatetruecolor($w$h);

        if (
in_array($this->format, array('gif','png')))
        {
            
$tr imagecolorallocate($img_out255255255);
            
imagefill($img_out,0,0,$tr);
            
imagecolortransparent($img_out$tr);   
            
imagetruecolortopalette($img_outfalse256); 
        }
        
        
imagecopyresampled($img_out$img_in00$x$y$w$h$w$h);
        
$rt $this->temp_save($img_out);
        @
imagedestroy($img_in);
        @
imagedestroy($img_out);

        return 
$rt;    
    }


ну там подправишь немножко... это часть класса

Спустя 1 день, 4 часа, 51 минута, 33 секунды (23.07.2009 - 21:37) ИНСИ написал(а):
Sylex огромное спасибо! Завтра поработаю =)) надеюсь сделаю =)) как что, потом напишу тут что получилось =))

Спустя 15 часов, 48 минут, 8 секунд (24.07.2009 - 13:26) gooder отдыхающий написал(а):
Если есть возможность, лучше использовать iMagick
3 строчки заменяют Ваши 3 страницы кода

Спустя 34 минуты, 16 секунд (24.07.2009 - 14:00) ИНСИ написал(а):
gooder можешь по подробнее???

Спустя 39 минут, 11 секунд (24.07.2009 - 14:39) gooder отдыхающий написал(а):

Спустя 11 минут, 45 секунд (24.07.2009 - 14:51) Sylex написал(а):
gooder
да его и юзаем wink.gif

Спустя 7 минут, 38 секунд (24.07.2009 - 14:58) }{-key написал(а):
iMagick идет как надстройка (как я понял).... дома-то его поставить не проблема, а что будет при хостинге?

Спустя 2 часа, 16 минут, 7 секунд (24.07.2009 - 17:15) ИНСИ написал(а):
дайте пример пожалуйста, как сделать? смотря на мой код, пожалуйста, сделайте пример... плиз =))

Спустя 4 часа, 52 минуты, 3 секунды (24.07.2009 - 22:07) ИНСИ написал(а):
Люди, помогите!
Сделал вот что
Свернутый текст
PHP
function resizeimg($uploadfile$type$image$width$height$q)
{    
    
$src_w intval($width);
    
$src_h intval($height);
    
$set_w abs(intval($width));    
    
$set_h abs(intval($height));  
    
$src_x $src_y 0;
        
    if (
$set_w == && $set_h == 0) { $set_w $src_w$set_h $src_h; }       
    if (
$set_w && $set_h == 0)  { $set_h ceil($src_h*$set_w/$src_w); }
    if (
$set_h && $set_w == 0)  { $set_w ceil($src_w*$set_h/$src_h); }
        
    
$prc_w ceil($src_w $set_h/$src_h);
    
$prc_h ceil($src_h $set_w/$src_w);
    
    if (
$prc_h >= $set_h) { $out_w $set_w$out_h $prc_h; }
    else { 
$out_w $prc_w$out_h $set_h; }

    if (
$out_w $set_w)
    {
        
$xw ceil($set_w $src_h/$set_h);
        
$src_x ceil(($src_w $xw)/2);
    }
    if (
$out_h $set_h)
    {
        
$xh ceil($set_h $src_w/$set_w);
        
$src_y ceil(($src_h $xh)/2);
    }
            
    if (
$out_w $set_w || $out_h $set_h
    {
        if (
$out_w $set_w
        {
            
$h ceil($out_h $set_w/$out_w); $w $set_w;
        }
        if (
$out_h $set_h
        {
            
$w ceil($out_w $set_h/$out_h); $h $set_h;
        }
     }  
    else
    {
        
$w $out_w$h $out_h;
    }
    
$src_x $src_y 0;                
    
$set_w $out_w $w;
    
$set_h $out_h $h;

    
$dest_img imagecreatetruecolor($set_w$set_h);

    if (
$type == "jpg" || "jpe" || "jpeg") { $src_img imagecreatefromjpeg($uploadfile); }
    else if (
$type == "gif") { $src_img imagecreatefromgif($uploadfile); }
    else if (
$type == "png") { $src_img imagecreatefrompng($uploadfile); }

    if(!
imagecopyresampled($dest_img$src_img00$src_x$src_y$out_w$out_h$src_w$src_h));

    if (
$type == "jpg" || "jpe" || "jpeg") { imagejpeg($dest_img$image$q); }
    else if (
$type == "gif") { imagegif($dest_img$image$q); }
    else if (
$type == "png") { imagepng($dest_img$image$q); }

    
imagedestroy($src_img);
    
imagedestroy($dest_img);
}


но картинка вырезается с верхнего левого угла и на нее ставятся какие -то слова: Rainfender 11/2008

как убрать и сделать вырезание с центра?
и еще, дайте пример как делать Не вырезание, а просто пропорциональное уменьшение????

Спустя 12 часов, 39 минут, 46 секунд (25.07.2009 - 10:46) ИНСИ написал(а):
дам 500 рублей, тому кто поможет и чей код я буду использовать. плиз.. помогите!

Спустя 1 час, 10 минут, 43 секунды (25.07.2009 - 11:57) Sylex написал(а):
welbox2
стучи в асю 1-(девятка)-38610-(двоечка)-2

Спустя 7 часов, 24 минуты, 19 секунд (25.07.2009 - 19:21) ИНСИ написал(а):
Sylex помог! И деньги перечислены ему! Советую его, потому что код написан очень понятно и с комментами =))

Спустя 8 дней, 13 часов, 5 минут, 43 секунды (4.08.2009 - 08:27) gooder отдыхающий написал(а):
а теперь с imagick без 500 рублей

PHP
$image = new Imagick($file_path);
$image->cropThumbnailImage(200140);
$image->writeImage($file_path);


Советую его, потому что код написан очень понятно и комментарии не нужны!

Цитата
iMagick идет как надстройка (как я понял).... дома-то его поставить не проблема, а что будет при хостинге?
А что на хостинге? Надо выбрать тот, где можно его поставить самому или он уже установлен (такие хостинги есть, да)

Спустя 16 минут, 5 секунд (4.08.2009 - 08:43) ИНСИ написал(а):
gooder спасибо. Но Sylex сделал функцию обрезки в редакторе. То есть редактор в него загружается фотка и сам пользователь уже выделяет область обрезки =))

Спустя 2 минуты, 7 секунд (4.08.2009 - 08:45) PandoraBox2007 написал(а):
да ну? все уже есть phpThumb ( http://phpthumb.sourceforge.net/ ) это для хостингов где компонентами не пахнет уменьшает и делает первюшки

Спустя 4 месяца, 27 дней, 8 часов, 17 минут, 57 секунд (31.12.2009 - 18:03) ju4ara написал(а):
welbox2 -
Цитата (welbox2 @ 4.08.2009 - 05:43)
редактор в него загружается фотка и сам пользователь уже выделяет область обрезки =))
- покажи как работает...тоже куплю у Sylex

Спустя 16 часов, 35 минут, 53 секунды (1.01.2010 - 10:39) ИНСИ написал(а):
ju4ara связывайся с Sylex-ом, показать не могу, так как делал для компании, которая работает по LAN, в интернете увидеть нельзя.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.