A recent project I’ve been working on required 4:3 thumbnails of all images no matter the original image’s orientation. This required me to do a little math and cropping before actually making the thumbnail. I use the package Image_Transform to figure out which orientation the image is and then crop it appropriately.
$o = Image_Transform::factory('IM');
if (PEAR::isError($o)) {
return $o;
}
$result = $o->load($ds1);
if (PEAR::isError($result)) {
return $result;
}
$w = $o->getImageWidth();
$h = $o->getImageHeight();
if ($h > $w) {
$newWidth = $w;
$newHeight = ($newWidth * .75);
$newY = ($h * .15);
$newX = 0;
} else {
$newWidth = ($w / 2);
$newHeight = ($newWidth * .75);
$newY = ($h / 2) - ($newHeight / 2);
$newX = ($x / 2) + ($newWidth / 2);
}
$o->crop($newWidth, $newHeight, $newX, $newY);
$o->save($ds2);
The first check checks to see if the image is in landscape or portrait (in portrait the height will be greater than the width). With portrait’s I use the width, multiple that by 0.75 to get my 4:3 ratio and finish by going 15% down from the top of the portrait (assuming that you’re focusing your portrait in the upper portion of the image). With landscape images I simply go outwards from the center of the image (again, assuming you’re focusing your landscape in the center of the image).