您现在的位置: 万盛学电脑网 >> 程序编程 >> 网络编程 >> php编程 >> 正文

php生成缩略图填充白边

作者:佚名    责任编辑:admin    更新时间:2022-06-22

 上传图片直接缩放的话就会导致图片变形,这样体验肯定就不好了。下面提供一种解决方法,缩小后添加白边的方法看下面的代码实现

网站上传图片后生成缩略图应该是非常常用的功能了,通常来讲为了网站显示美观,缩略图会是同样尺寸,比如最近笔者做的一个站点,缩略图规格要求都是160×120。但是如果上传的图片比例和缩略图不一致,直接缩放的话就会导致图片变形,这样体验肯定就不好了。于是笔者想了一个折中的办法,就是缩小后添加白边的方法。   源图,尺寸是600×366:   36.jpg   最终生成的效果图: 37.jpg     代码相对比较长些,下面简单说下思路:   先将源图按比例生成缩略图,并且宽不大于160、高不大于120。例如上图会先生成160×98的缩略图。 新建一个160×120的白色背景图片,将上一步生成的缩略图居中放置到这张图片上就OK了。 最终代码如下:   代码如下: //源图的路径,可以是本地文件,也可以是远程图片 $src_path = '1.jpg'; //最终保存图片的宽 $width = 160; //最终保存图片的高 $height = 120;   //源图对象 $src_image = imagecreatefromstring(file_get_contents($src_path)); $src_width = imagesx($src_image); $src_height = imagesy($src_image);   //生成等比例的缩略图 $tmp_image_width = 0; $tmp_image_height = 0; if ($src_width / $src_height >= $width / $height) {     $tmp_image_width = $width;     $tmp_image_height = round($tmp_image_width * $src_height / $src_width); } else {     $tmp_image_height = $height;     $tmp_image_width = round($tmp_image_height * $src_width / $src_height); }   $tmpImage = imagecreatetruecolor($tmp_image_width, $tmp_image_height); imagecopyresampled($tmpImage, $src_image, 0, 0, 0, 0, $tmp_image_width, $tmp_image_height, $src_width, $src_height);   //添加白边 $final_image = imagecreatetruecolor($width, $height); $color = imagecolorallocate($final_image, 255, 255, 255); imagefill($final_image, 0, 0, $color);   $x = round(($width - $tmp_image_width) / 2); $y = round(($height - $tmp_image_height) / 2);   imagecopy($final_image, $tmpImage, $x, $y, 0, 0, $tmp_image_width, $tmp_image_height);   //输出图片 header('Content-Type: image/jpeg'); imagejpeg($final_image);