вопрос по созданию уменьшенной копии картинки - вопрос №145004

вот в таком вот скрипте: while ($new_width>$maxwidth) { $new_width *= 0.99; $new_height *= 0.99; } while ($new_height>$maxheight) { $new_width *= 0.99; $new_height *= 0.99; } получается фотка с максимальным размером по одной из сторон в 99 пикселей. как мне сделать чтобы фото было размером в 150 пикселей?



Дополнение автора от 18.11.11 03:16:21

замена значений на 1.5 не помогает. после загрузки изображения дого думает затем путая страница. другие значения типа 0.150 или 1.50 тоже не помогают.либо пустота либо картинка получается совсем маленькая!



Дополнение автора от 18.11.11 03:19:52

phpthumb, наверное это хорошо, но мне, как не очень продвинутому сложно будет с ним разобраться



Дополнение автора от 18.11.11 03:20:06

вот все:

/******************************************************************************/
//                                                                            //
//                             InstantCMS v1.8                                //
//                        www.instantcms.ru/                           //
//                                                                            //
//                   written by InstantCMS Team, 2007-2010                    //
//                produced by InstantSoft, (www.instantsoft.ru)               //
//                                                                            //
//                        LICENSED BY GNU/GPL v2                              //
//                                                                            //
/******************************************************************************/

if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }

function img_add_watermark($src){
  $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;

  $isrc = $icfunc($src);

  img_watermark($isrc, $size[0], $size[1]);
 
   // вывод картинки и очистка памяти
  imagejpeg($isrc,$src,80);

}

function img_watermark(&$img, $w, $h){

    $inConf = cmsConfig::getInstance();

    if (!$inConf->wmark) { return; }

    $wm_file =     $_SERVER['DOCUMENT_ROOT'].'/images/'.$inConf->wmark;

    if (!file_exists($wm_file)) { return; }

    $size = getimagesize($wm_file);        
    
    $wm = imagecreatefrompng($wm_file);
    
    $wm_w = $size[0];
    $wm_h = $size[1];
    
    $wm_x = $w — $wm_w;
    $wm_y = $h — $wm_h;
    
    imagecopyresampled($img, $wm, $wm_x, $wm_y, 0, 0, $wm_w, $wm_h, $wm_w, $wm_h);
                
}

/***********************************************************************************
Функция img_resize(): генерация thumbnails
Параметры:
  $src             — имя исходного файла
  $dest            — имя генерируемого файла
  $width, $height  — ширина и высота генерируемого изображения, в пикселях
Необязательные параметры:
  $rgb             — цвет фона, по умолчанию — белый
  $quality         — качество генерируемого JPEG, по умолчанию — максимальное (100)
***********************************************************************************/
function img_resize($src, $dest, $maxwidth, $maxheight=160, $is_square=false, $watermark=false, $rgb=0xFFFFFF, $quality=80)
{
  if (!file_exists($src)) return false;

  $upload_dir = dirname($dest);        
  if (!is_writable($upload_dir)){ @chmod($dest, 0755); }

  $size = getimagesize($src);

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

  $new_width   = $size[0];
  $new_height  = $size[1];

  if (($new_height       @copy($src, $dest);
      return true;
  }

  // Определяем исходный формат по MIME-информации, предоставленной
  // функцией getimagesize, и выбираем соответствующую формату
  // imagecreatefrom-функцию.
  $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
  $icfunc = «imagecreatefrom». $format;
  if (!function_exists($icfunc)) return false;

  $isrc = $icfunc($src);

  if($is_square){
      $idest = imagecreatetruecolor($maxwidth,$maxwidth);
      imagefill($idest, 0, 0, $rgb);       
      // вырезаем квадратную серединку по x, если фото горизонтальное
      if ($new_width>$new_height)
      imagecopyresampled($idest, $isrc, 0, 0, round((max($new_width,$new_height)-min($new_width,$new_height))/2), 0, $maxwidth, $maxwidth, min($new_width,$new_height), min($new_width,$new_height));    
      // вырезаем квадратную верхушку по y,
      if ($new_width       imagecopyresampled($idest, $isrc, 0, 0, 0, 0, $maxwidth, $maxwidth, min($new_width,$new_height), min($new_width,$new_height));
      // квадратная картинка масштабируется без вырезок
      if ($new_width==$new_height)
       imagecopyresampled($idest, $isrc, 0, 0, 0, 0, $maxwidth, $maxwidth, $new_width, $new_width);
  } else {
        while ($new_width>$maxwidth) { $new_width *= 0.99; $new_height *= 0.99; }    
      while ($new_height>$maxheight) { $new_width *= 0.99; $new_height *= 0.99; }    
      $idest = imagecreatetruecolor($new_width, $new_height);
      imagefill($idest, 0, 0, $rgb);
      imagecopyresampled($idest, $isrc, 0, 0, 0, 0, $new_width, $new_height, $size[0], $size[1]);
       
  }
 
  if ($watermark) { img_watermark($idest, $new_width, $new_height); }         

  imageinterlace($idest,1);

  // вывод картинки и очистка памяти
  imagejpeg($idest,$dest,$quality);

  imagedestroy($isrc);
  imagedestroy($idest);
  return true;
}
?>

17.11.11
3 ответа

Ответы

Я бы для таких целей использовал phpThumb 

http://phpthumb.sourceforge.net/

17.11.11

while ($new_width>$maxwidth) { $new_width *= 1.5; $new_height *= 1.5; }

Вот так наверно. =)

17.11.11

Пишите в личку, помогу.

18.11.11

Alexander

Читать ответы

Дима

Читать ответы
Посмотреть всех экспертов из раздела Технологии > PHP
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store