Технологии

вопрос по созданию уменьшенной копии картинки - вопрос №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, 2011 г., 02:16:21

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

Дополнение автора от ноябрь 18, 2011 г., 02:19:52

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

Дополнение автора от ноябрь 18, 2011 г., 02: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, 2011 г.

Похожие вопросы

Аккорд WinNET

декабрь 16, 2012 г.

Технологии