Ресайз изображений

Тема в разделе "PHP", создана пользователем rasandrey, 10 авг 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    Подскажите, плиз, как правильно сделать ресайз изображений, чтобы в итоге получались картинки "квадратного" размера. Т.е. если у нас есть исходное изоражение 640*450, то как получить в итоге 100*100px?

    У меня есть функция, но она ресайзит немного не так, например, с 640*450 мы получим, примерно 100*60px. Высмотрел я на одном сайте http://uavto.dp.ua/ здесь thumb изображения все формата 158px × 119px и не зависимо, какого формата было исходное изоражение... Как они подгоняли под 158px × 119px для меня загадка
    PHP:
    function generate_thumbnail($fname$thumb_fname$max_x$max_y)
    {
      
    $ext strtolower(preg_replace("/.+\.(.*)$/""\\1"basename($fname)));
      switch (
    $ext) {
        case 
    'jpg':
        case 
    'jpeg':
          
    $im imagecreatefromjpeg($fname);
        break;
     
        case 
    'gif':
          
    $im imagecreatefromgif($fname);
        break;
     
        case 
    'png':
          
    $im imagecreatefrompng($fname);
        break;
        
        default:
          return 
    false;
        break;
      } 
    // switch type
      
    if (@$im) {
        list(
    $width$height$type$attr) = getimagesize($fname);
        if ((
    $width $max_x) or ($height $max_y)) {
          if (
    $width $height) {
            
    $nw $max_x;
            
    $nh = ($max_x $width) * $height;
          }
          else {
            
    $nw = ($max_y $height) * $width;
            
    $nh $max_y;
          }
          
    $thumb imagecreatetruecolor($nw$nh);
          
    imagecopyresampled($thumb$im0000$nw$nh$width$height);
          
    imagejpeg($thumb$thumb_fname90);
          
    imagedestroy($thumb);
        } 
    // need to resize
        
    else {
          
    copy($fname$thumb_fname);
        } 
    // just copy image
      
    // created image
      
    else {
        return 
    false;
      }
    // generate_thumbnail
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    например изменять размер пропорционально, центрировать и обрезать лишнее
    PHP:
    function CroppedThumbnail($imgSrc,$thumbnail_width,$thumbnail_height) {
        
    //getting the image dimensions 
        
    list($width_orig$height_orig) = getimagesize($imgSrc);  
        
    $myImage imagecreatefromjpeg($imgSrc);
        
    $ratio_orig $width_orig/$height_orig;
       
        if (
    $thumbnail_width/$thumbnail_height $ratio_orig) {
           
    $new_height $thumbnail_width/$ratio_orig;
           
    $new_width $thumbnail_width;
        } else {
           
    $new_width $thumbnail_height*$ratio_orig;
           
    $new_height $thumbnail_height;
        }
       
        
    $x_mid $new_width/2;  //horizontal middle
        
    $y_mid $new_height/2//vertical middle
       
        
    $process imagecreatetruecolor(round($new_width), round($new_height));
       
        
    imagecopyresampled($process$myImage0000$new_width$new_height$width_orig$height_orig);
        
    $thumb imagecreatetruecolor($thumbnail_width$thumbnail_height);
        
    imagecopyresampled($thumb$process00, ($x_mid-($thumbnail_width/2)), ($y_mid-($thumbnail_height/2)), $thumbnail_width$thumbnail_height$thumbnail_width$thumbnail_height);

        
    imagedestroy($process);
        
    imagedestroy($myImage);
        return 
    $thumb;
    }


    $newThumb CroppedThumbnail("image.jpg",100,100);

    header('Content-type: image/jpeg');
    imagejpeg($newThumb);
    или css
    HTML:
    
    <div style="background:url('image.jpg') center center no-repeat; width:100px; height:100px;"></div>
    
    <div style="width:100px;overflow:hidden;"><img src="image.jpg" height="100" /></div>
    
     
  3. t0os

    t0os

    Регистр.:
    21 окт 2007
    Сообщения:
    284
    Симпатии:
    36
    А как может картинка из неквадратной получиться квадратной? Пропорции, значит, надо менять или резать, как сказали выше. Но с какого боку резать, тоже еще вопрос.
     
  4. Graph33

    Graph33 Создатель

    Регистр.:
    4 авг 2010
    Сообщения:
    34
    Симпатии:
    0
  5. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    она делает изображение по заданным ширине и высоте вне зависимости начатьного формата? И вопрос какие параметры передеаются в этих переменных $rgb=0xFFFFFF, $quality=100 ?
     
  6. gres_18

    gres_18 Pythonобандерівець®

    Регистр.:
    26 апр 2009
    Сообщения:
    407
    Симпатии:
    206
    Это можно протестить, ага?
    $rgb - цвет, по умолчанию - белый. Используется в строке 31:
    PHP:
    imagefill($idest00$rgb);
    $quality - качество, по умолчанию 100%. Используется в строке 35:
    PHP:
    imagejpeg($idest$dest$quality);
     
  7. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    функция изменяет размер до указанных параметров, но если в результате не пропорция, то он оставляет просто белые поля. А хотелось бы, чтобы фотка просто немного обрезалась, если не пропорция, чтобы полей никаких неыло

    ---------- Post added at 14:08 ---------- Previous post was at 12:55 ----------

    то, что нужно, спасибо
     
  8. Graph33

    Graph33 Создатель

    Регистр.:
    4 авг 2010
    Сообщения:
    34
    Симпатии:
    0
    цвет полей тоже задавать можно.
    И в конце концов доработать функцию напильником тоже никто не запрещал ;)
     
Статус темы:
Закрыта.