уменьшение изображения

tasii

Новичок
уменьшение изображения

Есть скрипт который уменьшает изображение $image и выводит его в браузер но при этом качество очень сильно падает ,подскажите пожалуйста как повысить качество изображения на выходе
$img1=imagecreatefromjpeg($image);
$img2=imagecreate(150,200) ;

$w=imagesx($img1);
$h=imagesy($img1);
imagecopyresized($img2,$img1,0,0,0,0,150,200,$w,$h);
imagejpeg($img2);
 

AndreyKl

Новичок
сохранить оригинальные пропорции + imagecreatetruecolor + imagecopyresampled вместо imagecopyresized
 

tasii

Новичок
огромное спасибо ! а как сохранить оригинальные пропорции
 

tasii

Новичок
que_bunt
я думаю, что надо разделить высоту на ширину и умножить полученный коэффициент на зафиксированный размер, например на 150
 

que_bunt

Новичок
например ты хочешь чтобы ширина всех картинок была 200px, а высота у пропорционально:

PHP:
$new_w=200;
$k=$new_w/$w;  //коефициент сжатия
$new_h=round($k*$h);
imagecopyresampled($img2,$img1,0,0,$new_w,$new_h,$w,$h);
-~{}~ 02.09.06 16:43:

или так как ты и написал.
 

Agatov

Новичок
Автор оригинала: que_bunt
может
PHP:
$img2=ImageCreateTrueColor(150,200) ;
Именно оно!
Вот функция котрую я юзаю для уменьшения фоток. Не моя правда, но у меня до этого руки не дошли пока.
PHP:
function resampimagejpg($forcedwidth, $forcedheight, $sourcefile, $destfile, $imgcomp)
   {
   $g_imgcomp=100-$imgcomp;
   $g_srcfile=$sourcefile;
   $g_dstfile=$destfile;
   $g_fw=$forcedwidth;
   $g_fh=$forcedheight;

   if(file_exists($g_srcfile))
       {
       $g_is=getimagesize($g_srcfile);
       if(($g_is[0]-$g_fw)>=($g_is[1]-$g_fh))
           {
           $g_iw=$g_fw;
           $g_ih=($g_fw/$g_is[0])*$g_is[1];
           }
           else
           {
           $g_ih=$g_fh;
           $g_iw=($g_ih/$g_is[1])*$g_is[0];    
           }
       $img_src=imagecreatefromjpeg($g_srcfile);
       $img_dst=imagecreatetruecolor($g_iw,$g_ih);
       imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $g_iw, $g_ih, $g_is[0], $g_is[1]);
       imagejpeg($img_dst, $g_dstfile, $g_imgcomp);
       imagedestroy($img_dst);
       return true;
       }
       else
       return false;
   }
Комментов нет, но разобраться в коде не сложно.
 

Igor aka TiGR

Новичок
Ещё проще - использовать PEAR::Image_Transform. Там уже заложены различные алгоритмы уменьшения (с учётом пропорций, без учёта, по максимальной стороне, минимальной), и не надо изобретать велосипед.
 

que_bunt

Новичок
Igor aka TiGR изобретать не надо, а сделать нормально самому - намного ИМХО интересней.
 
Сверху