Загрузка картинок на сервер и изменение оазмеров

Discussion in 'PHP' started by mff, 12 Sep 2008.

  1. mff

    mff Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    Ребят, как сделать загрузку картинок, но при этом чтобы менялся их размер и делались 3 копии, малая, средняя и оригинал? :confused: Может у кого примерчик есть?
     
  2. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    Возьми любой скрипт для хостинга картинок, там полюбому будет "примерчик"
     
    2 people like this.
  3. mff

    mff Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    СПС, вот сразу нашел:
    10 скриптов хостинга картинок!

    [​IMG]

    В архиве находятся 10 популярных скриптов для создания хостинга картинок. Теперь выбрав наиболее понравившийся скрипт, Вы сможете создать собственный сервис по хранению изображений, наподобие foto.radikal, imageshack или других подобных сайтов.

    Список скриптов в архиве (1.42 Mb):

    CoSiS Free Image Host Script
    EasyImageHoster 1.35
    GMPH v1.0.3
    Image Upload
    Image Host Script 0.7
    DXL dev\' Image Hosting Script
    ImgUpload 2.0.1
    UPLOADIMAGE v1.02
    imageshack.us Clone
    eXtreme Photo Hosting 2006

    http://letitbit.net/download/9535a8173129/kpot.net-image.zip.html
    http://depositfiles.com/files/2987111

    Полез ковырять...
     
  4. [х26]VОLАND

    [х26]VОLАND Elder - Старейшина

    Joined:
    7 Jun 2006
    Messages:
    513
    Likes Received:
    756
    Reputations:
    218
    Я делаю вот так:

    PHP:
    function resize($image$new_width$target) {
        if (
    file_exists($image))
        {
            
    $image ImageCreateFromJPEG($image);
            
    $width Imagesx($image);
            
    $height Imagesy($image);
            
    $new_height = ($new_width $height) / $width ;
            
    $thumb ImageCreateTrueColor($new_width,$new_height);
            
    ImageCopyResampled($thumb$image0,0,0,0$new_width$new_height$width$height);
            
    ImageJPEG($thumb$target100);
            
    Imagedestroy($image);
        }
    }
    $image - исходная картинка
    $new_width - новая ширина (относительно неё происходит ресайз)
    $target - целевая картинка

    Пример вызова:
    PHP:
    resize($image128'128.jpg');
    resize($image256'256.jpg');
    Получаем 2 уменьшенные картинки разного размера.

    //PS: думаю загрузку на сервер сам реализуешь.
     
    3 people like this.
  5. mff

    mff Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    [x26]VOLAND? то что надо! Спс! :)
     
  6. imajo.ati

    imajo.ati Banned

    Joined:
    21 Feb 2008
    Messages:
    232
    Likes Received:
    62
    Reputations:
    8
    [x26]VOLAND
    если высота картинки больше ширины, нужно задавать как раз высоту, т.к. ширина не будет известна изначально. к примеру если подгонять изображение 200x655 к 400х300

    я по-другому решил это

    PHP:
    function open_image($file) {
        
    $im = @imagecreatefromjpeg($file);
        if (
    $im !== false) return $im;
        
    $im = @imagecreatefromgif($file);
        if (
    $im !== false) return $im;
        
    $im = @imagecreatefrompng($file);
        if (
    $im !== false) return $im;
                
    $im = @imagecreatefromgd2($file);
                if (
    $im !== false) return $im;
                
    $im = @imagecreatefromwbmp($file);
                if (
    $im !== false) return $im;
                
    $im = @imagecreatefromxbm($file);
                if (
    $im !== false) return $im;
                
    $im = @imagecreatefromstring(file_get_contents($file));
                if (
    $im !== false) return $im;
        return 
    'error';
    }
    //end_func

    function imageresize($outfile,$infile,$neww,$newh) {

        
    $im open_image($infile);
        if ( 
    $im === 'error' ) return false;

        else
        {
        
    $imajo_w imagesx($im);
        
    $imajo_h imagesy($im);

        if ( 
    $imajo_w $neww OR $imajo_h $newh )
        {
        
    $nat true;

          if ( 
    $imajo_w $neww AND $imajo_h <= $newh )
          {
            
    $percent $imajo_w $neww;
            
    $new_width  $neww;
            
    $new_height $imajo_h $percent;
          }
          elseif ( 
    $imajo_w <= $neww AND $imajo_h $newh )
          {
            
    $percent $imajo_h $newh;
            
    $new_height $newh;
            
    $new_width  $imajo_w $percent;
          }
          else
          {
            
    $percent_h $imajo_h $newh;
            
    $percent_w $imajo_w $neww;
            if ( 
    $percent_h $percent_w )
            {
                
    $new_height round($imajo_h $percent_h);
                
    $new_width  round($imajo_w $percent_h);
            }
            else
            {
                
    $new_height round($imajo_h $percent_w);
                
    $new_width  round($imajo_w $percent_w);
            }
          }


          
    $im1 imagecreatetruecolor($new_width,$new_height);
          
    imagecopyresampled($im1,$im,,,,,$new_width,$new_height,imagesx($im),imagesy($im));
        }
        else
        {
         
    $im1 false;
         
    $nat false;
        }


        if ( 
    $im1 === false )
        {
          
    imagejpeg($im,$outfile,75);
          
    imagedestroy($im);
        }
        else
        {
          
    imagejpeg($im1,$outfile,75);
          
    imagedestroy($im);
          
    imagedestroy($im1);
        }
        return 
    $nat;
        }
    }
    //end_func

    но код длинный получился О_О
    можно по желанию компактнее написать


    скрипту нужно задать размеры для подгонки. если размер оригинала меньше размеров для подгонки, изображение не увеличивается. и в назначение копируется оригинал.
    функция создает файл + возвращает, было ли изменено изображение
     
    #6 imajo.ati, 12 Sep 2008
    Last edited: 12 Sep 2008