Обрезание картинок

S
На сайте с 15.12.2009
Offline
67
475

Здравствуйте, хочу реализовать "правильное" обрезание картинок. Все ок, кроме одного ньюанса который сам не могу исправить(

Так вот, картинка просто обрезается. А нужно сначала до обрезания краев изменить масштаб. Вот пример:

есть картинка 1600х1400, если просто обрезать то краев не будет, а если изменить размер сначала до 1440х1260 (сохраняя пропорции) и уже обрезать 1440х1260 было бы круче, т.к. больше картинки влезет. Думаю ясно изложил) Всем спасибо на перед!)

<?

cropImage(225, 165, '/path/to/source/image.jpg', 'jpg', '/path/to/dest/image.jpg');

function cropImage($nw, $nh, $source, $stype, $dest) {

$size = getimagesize($source);
$w = $size[0];
$h = $size[1];

switch($stype) {
case 'gif':
$simg = imagecreatefromgif($source);
break;
case 'jpg':
$simg = imagecreatefromjpeg($source);
break;
case 'jpeg':
$simg = imagecreatefromjpeg($source);
break;
case 'png':
$simg = imagecreatefrompng($source);
break;
}

$dimg = imagecreatetruecolor($nw, $nh);

$wm = $w/$nw;
$hm = $h/$nh;

$h_height = $nh/2;
$w_height = $nw/2;

if($w> $h) {

$adjusted_width = $w / $hm;
$half_width = $adjusted_width / 2;
$int_width = $half_width - $w_height;

imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);

} elseif(($w <$h) || ($w == $h)) {

$adjusted_height = $h / $wm;
$half_height = $adjusted_height / 2;
$int_height = $half_height - $h_height;

imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);

} else {
imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);
}

imagejpeg($dimg,$dest,100);
}


?>
[Удален]
#1

не понятно. У вас же в коде есть новые размеры. И картинки больше не влезет - влезет ровнос столько, сколько надо. А вот код


switch($stype) {
case 'gif':
$simg = imagecreatefromgif($source);
break;
case 'jpg':
$simg = imagecreatefromjpeg($source);
break;
case 'jpeg':
$simg = imagecreatefromjpeg($source);
break;
case 'png':
$simg = imagecreatefrompng($source);
break;
}

я бы поменял на


$myfunc = 'imagecreatefrom'.$stype;
if (!function_exists($myfunc))
return false;
$simg = $myfunc($source);

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий