Как сжать на сервере и вывести image средствами Php?

Discussion in 'PHP' started by PEPSICOLA, 17 Jan 2007.

  1. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    824
    Reputations:
    368
    Вообщем сабж :) Допустим у меня на сайт есть картинки разного разрешения, в формате Jpg. Это на случай если кто нажмёт "download original file", а как для preview хотелось бы что бы все картинки одинаково выводились размером 600x440 А ещё лучше сжимались в ширине до 600 пропорционально высоте, как уж выйдет.

    Помню что должна быть какая то поддержка со стороны сервера. Но вообщем, как это назвать и где бы поискать? Саму процедуру обработки image'ов =)

    Большое спасибо!
     
    2 people like this.
  2. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    вобще рекомендую сделать отдельную папку с уже готовыми превюшками, так как их сжатие будет занимать не мало времени!

    а вот собсна и функция для сжатия:
    PHP:
    /***********************************************************************************
    Функция img_resize("имя исходного файла", " имя генерируемого файла", " ширина ",  "высота" ," качество генерируемого JPEG, по умолчанию - максимальное ","цвет фона, по умолчанию - белый")
    ***********************************************************************************/

    function img_resize($src$dest$width$height$quality=100$rgb=0xFFFFFF)
    {
      if (!
    file_exists($src)) return false;

      
    $size getimagesize($src);

      if (
    $size === false) return false;

      
    // Определяем исходный формат по MIME-информации, предоставленной
      // функцией getimagesize, и выбираем соответствующую формату
      // imagecreatefrom-функцию.
      
    $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);

      
    $new_width   $use_x_ratio  $width  floor($size[0] * $ratio);
      
    $new_height  = !$use_x_ratio $height floor($size[1] * $ratio);
      

      
    $isrc $icfunc($src);
      
    $idest imagecreatetruecolor($new_width$new_height);

      
    imagefill($idest00$rgb);
      
    imagecopyresampled($idest$isrc0000$new_width$new_height$size[0], $size[1]);
      
      for(
    $i=strlen($dest)-1;$i>=0;$i--)
          if(
    $dest[$i]=='.')
             break;
          
    $i++;
       
    $ftypeg="";
      while(
    $i<strlen($dest))
           { 
            
    $ftypeg.=$dest[$i];
            
    $i++;
            }
                if(
    strtolower($ftypeg)=="jpg")
           
    $ftypeg="jpeg";
          
    $ftypeg="image".$ftypeg;
      if (!
    function_exists($ftypeg)) return false;
      
    $ftypeg($idest$dest$quality);

      
    imagedestroy($isrc);
      
    imagedestroy($idest);

      return 
    true;

    }
    в данном случае, результат свое работы она сохраняет на диске, можно сделать чтоб сразу вывадило, но не рекомендую!
     
    1 person likes this.
  3. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    824
    Reputations:
    368
    Большое спасибо, на счёт маленьких превьюшек 100 на 100 это уже отдельно сделано, а вот захотят ли посмотреть на саму работу, это ещё по линку перейти надо. Поэтому происходить будет выборочно...

    Интересно сколько примерно ресурсов компьютера будет требовать одно такое обращение? И сколько времени сам скрипт будет занимать... Уж действительно может лучше отдельно залить, а то при n'ом количестве посещений и запросов нагрузка будет чрезвычайна последствиями :) Так и сервак можно убить если захотеть :)
     
  4. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    кодирование одной картинке займет около ~2 секунд
    я так пологая у тя тм будет галерея.....
    короч лучше сделай 3 папки, одно с превюхами дето 100Х100, вторая для просмотра гдет 640Х480 а третья с фотками для скачки там уже от 1024Х768 и выше....
     
  5. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    824
    Reputations:
    368
    А можно ли сделать такую вещь:
    Но с условием что при указании scr картинка просто складывалась относительно пропорциям...
    То есть не теряя форму, не растягивалась только в ширину или только в длинну...