php生成缩略图自动填充白边例子

今天看到这篇文章想我想到了几年前帮助一个客户做一个网站,那种要求里面就有一个宽度不足够时需要自动给图片生成白边了,下面我看到一个不错的例子整理一下给各位.

网站上传图片后生成缩略图应该是非常常用的功能了,通常来讲为了网站显示美观,缩略图会是同样尺寸,比如最近笔者做的一个站点,缩略图规格要求都是160×120,但是如果上传的图片比例和缩略图不一致,直接缩放的话就会导致图片变形,这样体验肯定就不好了,于是笔者想了一个折中的办法,就是缩小后添加白边的方法.

下面简单说下思路,先将源图按比例生成缩略图,并且宽不大于160、高不大于120,例如上图会先生成160×98的缩略图,新建一个160×120的白色背景图片,将上一步生成的缩略图居中放置到这张图片上就OK了,代码如下:

  1. //源图的路径,可以是本地文件,也可以是远程图片
  2. $src_path = '1.jpg';
  3. //最终保存图片的宽
  4. $width = 160;
  5. //最终保存图片的高
  6. $height = 120;
  7. //源图对象
  8. $src_image = imagecreatefromstring(file_get_contents($src_path));
  9. $src_width = imagesx($src_image);
  10. $src_height = imagesy($src_image);
  11. //生成等比例的缩略图
  12. $tmp_image_width = 0;
  13. $tmp_image_height = 0;
  14. if ($src_width / $src_height >= $width / $height) {
  15. $tmp_image_width = $width;
  16. $tmp_image_height = round($tmp_image_width * $src_height / $src_width);
  17. } else {
  18. $tmp_image_height = $height;
  19. $tmp_image_width = round($tmp_image_height * $src_width / $src_height);
  20. }
  21. $tmpImage = imagecreatetruecolor($tmp_image_width, $tmp_image_height);
  22. imagecopyresampled($tmpImage, $src_image, 0, 0, 0, 0, $tmp_image_width, $tmp_image_height, $src_width, $src_height);
  23. //添加白边
  24. $final_image = imagecreatetruecolor($width, $height);
  25. $color = imagecolorallocate($final_image, 255, 255, 255);
  26. imagefill($final_image, 0, 0, $color);
  27. //开源软件:phpfensi.com
  28. $x = round(($width - $tmp_image_width) / 2);
  29. $y = round(($height - $tmp_image_height) / 2);
  30. imagecopy($final_image, $tmpImage, $x, $y, 0, 0, $tmp_image_width, $tmp_image_height);
  31. //输出图片
  32. header('Content-Type: image/jpeg');
  33. imagejpeg($final_image);