Помощь по ресайзу изображений

thunderslim

Новичок
Помощь по ресайзу изображений

Добрый вечер. Прошу помощи. Ни у кого нет функции ресайза изображений до заданных значений. То есть у меня допустим есть значения ширины и высоты, которые должны быть у получившейся на выходе картинки. Знаю, что делается это imagecopyresampled, надо проставить координаты начала и конца. Также знаю, что есть два варианта ресайза, или даже три, в зависимости от значения ширины и высоты, но совсем нету времени этим заниматься. Попробовал сходу написать, написал - действует только на изображения у которых ширина значительно отличается от высоты и наоборот. Ни у кого нет, вообщем? :)
 

whirlwind

TDD infected, paranoid
PHP:
function make_preview($img){
    $pvx = PREV_W;
    $pvy = PREV_H;

    $pvaspect = $pvx / $pvy;
	$pvd = imagecreatetruecolor($pvx,$pvy);
    $pvbg = imagecolorallocate($pvd,255,255,255);
	imagefill($pvd,0,0,$pvbg);

    $imx = imagesx($img);
    $imy = imagesy($img);
    $imaspect = $imx / $imy;

    $imc = $pvaspect < $imaspect ? $pvx/$imx : $pvy/$imy;
    $nimx = floor($imx*$imc);
    $nimy = floor($imy*$imc);
    imagecopyresampled($pvd,$img,floor(($pvx-$nimx)/2)
        ,floor(($pvy-$nimy)/2),0,0,$nimx,$nimy,$imx,$imy);

    header("Content-Type: image/png");
    imagepng($pvd);
    imagedestroy($pvd);
}
 

msdn11

Новичок
давай так. я подержу картинку за один край, а ты потянешть за другой...;-)
тут ресайз до 80 по ширене. переделай как тебе надо.
PHP:
function img_res65($src, $dest, $rgb=0xFFFFFF, $quality=100)
{
  if (!file_exists($src)) return false;

  $size = getimagesize($src);

  if ($size === false) return false;
  $width = 80;
  $height = ceil(($size[1]/$size[0])*80);

  $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);
  $new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width) / 2);
  $new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);

  $isrc = $icfunc($src);
  $idest = imagecreatetruecolor($width, $height);

  imagefill($idest, 0, 0, $rgb);
  imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0,
    $new_width, $new_height, $size[0], $size[1]);

  imagejpeg($idest, $dest, $quality);

  imagedestroy($isrc);
  imagedestroy($idest);

  return true;

}

//
 

thunderslim

Новичок
В том, что сделать работающий скрипт быстро не удается.
Вот то, что получилось сейчас.Он работает с изображениями у которых ширина много больше высоты и наоборот. С квадратами и окло них - не работает.

<?
function imgreszres($src)
{

$imgsrc = imagecreatefromjpeg($src);
$width = imagesx($imgsrc);
$height = imagesy($imgsrc);
$imgfinal = imagecreatetruecolor(137, 105);

if ($width>=$height)
{
//Подгон по высоте
$hdest=105;

$ratio=$width/$height;
$wdest=round($ratio*$hdest);
$imgdest=imagecreatetruecolor($wdest,$hdest);
echo $wdest."-----".$ratio;
imagecopyresampled($imgdest, $imgsrc, 0, 0, 0, 0, $wdest, $hdest, $width, $height);
if ($wdest>137)
{
$center=$wdest/2;
$c_is=137/2;
$leftpoint=round($center-$c_is);
$rightpoint=round($center+$c_is);
imagecopyresampled($imgfinal,$imgdest,0,0,$leftpoint,0,137,105,137,105);


}
imagejpeg($imgdest, "test/testing.jpg", 100);
imagejpeg($imgfinal, "test/final.jpg", 100);
}
else
{
$wdest=137;
$ratio=$height/$width;
$hdest=round($ratio*$wdest);
$imgdest=imagecreatetruecolor($wdest,$hdest);
imagecopyresampled($imgdest, $imgsrc, 0, 0, 0, 0, $wdest, $hdest, $width, $height);
if ($hdest>105)
{
$center=$hdest/2;
$c_is=105/2;
$toppoint=round($center-$c_is);
$botpoint=round($center+$c_is);
imagecopyresampled($imgfinal,$imgdest,0,0,0,$toppoint,137,105,137,105);


}
imagejpeg($imgdest, "test/testing.jpg", 100);
imagejpeg($imgfinal, "test/final.jpg", 100);
}
}
?>

-~{}~ 13.11.06 19:08:

Спасибо!
phprus: Вся статья почему-то не загружается.
 
Сверху