PHP生成缩略图(2)--等比缩略图
分析:
当原图是横屏或竖屏的时候,希望缩略图会保持原来的比例缩放,不改变原图的完整性,即等比缩放!
此时只需确定原图的宽高,以及目标图的最大宽高,比较目标图的宽高比例与原图的宽高比例的大小,以此来判断原图是横屏或竖屏来确定以高或宽为标准即可!
代码如下:
//求目标图片的宽高 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); ?>
结果如下:
竖屏图片
横屏图片:
——现在的努力,只为小时候吹过的牛逼! ——