php生成缩略图填充白边(等比缩略图方案)

 更新时间:2013年12月25日 12:18:10   作者:  
上传图片直接缩放的话就会导致图片变形,这样体验肯定就不好了。下面提供一种解决方法,缩小后添加白边的方法看下面的代码实现

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

源图,尺寸是600×366:

最终生成的效果图:

代码相对比较长些,下面简单说下思路:

先将源图按比例生成缩略图,并且宽不大于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);

相关文章

  • thinkPHP+ajax实现统计页面pv浏览量的方法

    thinkPHP+ajax实现统计页面pv浏览量的方法

    这篇文章主要介绍了thinkPHP+ajax实现统计页面pv浏览量的方法,涉及thinkPHP模板调用及数据库读写相关操作技巧,需要的朋友可以参考下
    2017-03-03
  • 基于Laravel 多个中间件的执行顺序详解

    基于Laravel 多个中间件的执行顺序详解

    今天小编就为大家分享一篇基于Laravel 多个中间件的执行顺序详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • php定义数组和使用示例(php数组的定义方法)

    php定义数组和使用示例(php数组的定义方法)

    这篇文章主要介绍了php定义数组和使用示例(php数组的定义方法),需要的朋友可以参考下
    2014-03-03
  • laravel框架中视图的基本使用方法分析

    laravel框架中视图的基本使用方法分析

    这篇文章主要介绍了laravel框架中视图的基本使用方法,结合实例形式分析了laravel框架中视图的原理、调用及相关操作注意事项,需要的朋友可以参考下
    2019-11-11
  • CI(CodeIgniter)框架配置

    CI(CodeIgniter)框架配置

    今天研究了下CI框架的说明文档,打算在下次项目中用用看。先把今天看完的内容整理整理,基本配置非常简单,好像在配置方面 在没有比ci框架简便的了。。
    2014-06-06
  • Laravel自定义 封装便捷返回Json数据格式的引用方法

    Laravel自定义 封装便捷返回Json数据格式的引用方法

    今天小编就为大家分享一篇Laravel自定义 封装便捷返回Json数据格式的引用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • laravel5创建service provider和facade的方法详解

    laravel5创建service provider和facade的方法详解

    这篇文章主要介绍了laravel5创建service provider和facade的方法,实例分析了laravel创建service、provider和facade类的具体步骤与实现技巧,需要的朋友可以参考下
    2016-07-07
  • PHP产生不重复随机数的5个方法总结

    PHP产生不重复随机数的5个方法总结

    这篇文章主要介绍了PHP产生不重复随机数的5个方法总结,PHP随机数经常在项目中使用,本文总结了网络上的和自己项目中用到的随机数生成方法,需要的朋友可以参考下
    2014-11-11
  • php cc攻击代码与防范方法

    php cc攻击代码与防范方法

    今天把客户查找后门的时候发现的代码,特分享下,看到这样的代码就是黑客用来攻击别人访问,不断访问指定网站,导致网站无法访问,我们的网站就是帮凶了,同时我们自己的网站或服务器也会无法访问,所以一定要注意防范。
    2012-10-10
  • Laravel如何同时连接多个数据库详解

    Laravel如何同时连接多个数据库详解

    这篇文章主要给大家介绍了关于Laravel如何同时连接多个数据库的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Laravel具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08

最新评论