分析:
当原图是横屏或竖屏的时候,希望缩略图会保持原来的比例缩放,不改变原图的完整性,即等比缩放!
此时只需确定原图的宽高,以及目标图的最大宽高,比较目标图的宽高比例与原图的宽高比例的大小,以此来判断原图是横屏或竖屏来确定以高或宽为标准即可!
代码如下:
//求目标图片的宽高
if ($max_width/$max_height < $src_width/$src_height) {
$dst_w = $max_width; //以宽为标准
$dst_h = $max_width * $src_height/$src_width;
}else{
$dst_h = $max_height; //以高为标准
$dst_w = $max_height * $src_width/$src_height;
}
完整代码如下:
<?php
//目标图片最大宽高
$max_width = 300;
$max_height = 300;
//创建一个真彩色的图像,支持的颜色数较多
$dst = imagecreatetruecolor($max_width, $max_height); //目标图宽高
$src = imagecreatefromjpeg('./01.jpg'); //源图
$src_width = imagesx($src); //源图的宽度
$src_height = imagesy($src); //源图的高度
//求目标图片的宽高
if ($max_width/$max_height < $src_width/$src_height) {
//横屏图片以宽为标准
$dst_w = $max_width;
$dst_h = $max_width * $src_height/$src_width;
}else{
//竖屏图片以高为标准
$dst_h = $max_height;
$dst_w = $max_height * $src_width/$src_height;
}
//在目标图上显示的坐标位置
$dst_x = (int)(($max_width-$dst_w)/2);
$dst_y = (int)(($max_height-$dst_h)/2);
//生成缩略图
imagecopyresampled($dst,$src,$dst_x,$dst_y,0,0,$dst_w,$dst_h,$src_width,$src_height);
//输出到浏览器
header('content-type:image/png');
imagepng($dst);
//销毁图片资源
imagedestroy($dst);
imagedestroy($src);
?>
结果如下:
竖屏图片
横屏图片:
——现在的努力,只为小时候吹过的牛逼! ——