Jump to content

cropping an image with gd. I don't want black borders


Giddy Rob

Recommended Posts

Hi,

 

I can't seem to  find a good method of cropping down an image without sometimes adding black borders. The function I am using is:

 

 

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 'png':

 

 

              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,186);

      }//end of crop image

 

The above function sometimes works but it depends on the image dimensions it tries to  crop. Does anyone know a fix for this function or a new function that just gets it right every time?

 

Cheers in advance

 

Rob

try

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 'png':

		break;
}
$dimg = imagecreatetruecolor($nw, $nh);
$wm = $w/$nw;
$hm = $h/$nh;
$h_height = $nh/2;
$w_height = $nw/2;
if($wm> $hm) {
	$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(($wm <$hm) || ($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,186);
}//end of crop im

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.