как сделать превью изображения средствами чистого пхп без расширений ?

Discussion in 'PHP' started by Дикс, 17 Oct 2006.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    Я знаю про exif_thumbnail
    но её нет в стандартной инсталляции пхп.
    Как вы считаете, стоит ли её использовать - может это расширение достаточно распространено, либо есть какие-то другие средства создания превью?
     
  2. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    Есле я тя правильно понял то вот:
    функция меняющая разрешение картинки
    PHP:
    Функция imgresize("имя исходного файла"" имя генерируемого файла"" ширина ",  "высота" ," качество генерируемого JPEG, по умолчанию - максимальное ","цвет фона, по умолчанию - белый")
    ***********************************************************************************/

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

      
    $size getimagesize($src);

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

      
    $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;

    }
     
    #2 nc.STRIEM, 17 Oct 2006
    Last edited: 17 Oct 2006
  3. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    куда легче делать наподобии мозайки только наоборот - делаем целочисленно деление высоты исходной на высоту нужной == dx(аналогично для ширины). далее делаем цикл по матрице картинки (пох джпег или что другое в пхп сила) с пробегом dx и вставляем в новую кратинку размерами нужной с пробегом в 1 пиксель. ну идея думаю понятна.
     
  4. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    ага, и на выходе получаем говно.
     
    1 person likes this.
  5. EXSlim

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

    Joined:
    9 Oct 2006
    Messages:
    73
    Likes Received:
    20
    Reputations:
    18
    >>>Я знаю про exif_thumbnail
    но её нет в стандартной инсталляции пхп.

    Эта функция не входит в модуль GDlib. Она доступна если PHP(от 4й версии) скомпилирован с опцией --enable-exif.
     
  6. SMiX

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

    Joined:
    25 Jul 2005
    Messages:
    227
    Likes Received:
    55
    Reputations:
    29
    imagecopyresampled если я правильно понимаю задачу...
     
  7. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    Эта функция береться за основу, но чеб картинка нормальной получилась, над еще пару нюансов учесть.. (см. выше)
     
  8. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    если вообще без модулей, уважаемый дикс, то тебе будет проще убиться ап стенку =)
    Gd - это расширение.
     
    _________________________
  9. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    вот и я про тоже. но, ёпт, ответьте мне, если знаете:
    часто на серверах хостеров попадается пхп скомпилированный с этим эксифом?

    за функцию спасиба, попробую попользовать :)
     
  10. Zitt

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

    Joined:
    7 May 2006
    Messages:
    736
    Likes Received:
    268
    Reputations:
    59
    Дикс, вот посмотри вот етот "движок" для фоток без наворотов зато сам автоматически создаёт превью vj; чё найдёш полезного для себя!
     
  11. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    всё, уже сделал с функцией nc.Striema
    потом разберусь в её устройстве и под себя переделаю, чтоб не плагиатничать, а пока надо дипломную работу поскорее закончить =)