【发布时间】:2012-04-23 20:07:48
【问题描述】:
我正在使用以下 PHP 脚本创建方形缩略图,我在这里得到了 http://www.abeautifulsite.net/blog/2009/08/cropping-an-image-to-make-square-thumbnails-in-php/
我能够将其集成到我的图片上传脚本中,该脚本会上传全尺寸图片,然后获取上传的图片并从中创建缩略图。 问题是脚本的作者说,它会毫无问题地裁剪风景和肖像图像。它完美地裁剪横向图像,但是当它面向纵向图像时,输出缩略图将不会被裁剪,但它会按比例缩小以适合给定的方形缩略图高度,并且两侧的空白空间将填充黑色。 我知道有办法解决这个问题,但由于我对 PHP 比较陌生,所以我无法解决它。
有 PHP 真正经验的人可以解决这个问题吗? 提前谢谢!
脚本在这里: $
function square_crop($src_image, $dest_image, $thumb_size = 64, $jpg_quality = 90) {
// Get dimensions of existing image
$image = getimagesize($src_image);
// Check for valid dimensions
if( $image[0] <= 0 || $image[1] <= 0 ) return false;
// Determine format from MIME-Type
$image['format'] = strtolower(preg_replace('/^.*?\//', '', $image['mime']));
// Import image
switch( $image['format'] ) {
case 'jpg':
case 'jpeg':
$image_data = imagecreatefromjpeg($src_image);
break;
case 'png':
$image_data = imagecreatefrompng($src_image);
break;
case 'gif':
$image_data = imagecreatefromgif($src_image);
break;
default:
// Unsupported format
return false;
break;
}
// Verify import
if( $image_data == false ) return false;
// Calculate measurements
if( $image[0] & $image[1] ) {
// For landscape images
$x_offset = ($image[0] - $image[1]) / 2;
$y_offset = 0;
$square_size = $image[0] - ($x_offset * 2);
} else {
// For portrait and square images
$x_offset = 0;
$y_offset = ($image[1] - $image[0]) / 2;
$square_size = $image[1] - ($y_offset * 2);
}
// Resize and crop
$canvas = imagecreatetruecolor($thumb_size, $thumb_size);
if( imagecopyresampled(
$canvas,
$image_data,
0,
0,
$x_offset,
$y_offset,
$thumb_size,
$thumb_size,
$square_size,
$square_size
)) {
// Create thumbnail
switch( strtolower(preg_replace('/^.*\./', '', $dest_image)) ) {
case 'jpg':
case 'jpeg':
return imagejpeg($canvas, $dest_image, $jpg_quality);
break;
case 'png':
return imagepng($canvas, $dest_image);
break;
case 'gif':
return imagegif($canvas, $dest_image);
break;
default:
// Unsupported format
return false;
break;
}
} else {
return false;
}
}
?>
我这样称呼它 - square_crop('source_image', 'destination_image', 65);
你可以在这里看到结果http://imageshack.us/photo/my-images/717/imgfl.png/
这种情况只发生在纵向图片上,横向图片会被裁剪成填满整个正方形。
【问题讨论】:
-
正如我在帖子中提到的:它完美地裁剪横向图像,但由于它面向纵向图像,输出缩略图不会被裁剪,但它会按比例缩小以适合给定的方形缩略图高度和两侧的空白空间将被黑色填充。
-
您可以在此处查看纵向图像裁剪和调整大小的最终结果imageshack.us/photo/my-images/717/imgfl.png
标签: php image resize thumbnails crop