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


Posted in PHP onDecember 25, 2013

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

源图,尺寸是600×366:

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

最终生成的效果图:

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

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

先将源图按比例生成缩略图,并且宽不大于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);
PHP 相关文章推荐
PHP4之真OO
Oct 09 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
Jul 01 PHP
在WordPress的文章编辑器中设置默认内容的方法
Dec 29 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
Feb 04 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
Mar 21 PHP
Zend Framework框架路由机制代码分析
Mar 22 PHP
php基于curl实现的股票信息查询类实例
Nov 11 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
Yii2框架类自动加载机制实例分析
May 02 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 23 PHP
如何用PHP实现分布算法之一致性哈希算法
May 26 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
Dec 25 #PHP
php使用strtotime和date函数判断日期是否有效代码分享
Dec 25 #PHP
php制作unicode解码工具(unicode编码转换器)代码分享
Dec 24 #PHP
linux实现php定时执行cron任务详解
Dec 24 #PHP
生成随机字符串和验证码的类的PHP实例
Dec 24 #PHP
php下载excel无法打开的解决方法
Dec 24 #PHP
php calender(日历)二个版本代码示例(解决2038问题)
Dec 24 #PHP
You might like
基于pear auth实现登录验证
2010/02/26 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
JQuery控制DIV的选取实现方法
2016/09/18 Javascript
微信小程序 picker 组件详解及简单实例
2017/01/10 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
webpack热模块替换(HMR)/热更新的方法
2018/04/05 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
python实现发送和获取手机短信验证码
2016/01/15 Python
python安装教程 Pycharm安装详细教程
2017/05/02 Python
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
Django实现快速分页的方法实例
2017/10/22 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
python dict 相同key 合并value的实例
2019/01/21 Python
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
员工薪酬福利制度
2014/01/17 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
专科生就业求职信
2014/06/22 职场文书
青春飞扬演讲稿
2014/09/11 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
我的收音机情缘
2022/04/05 无线电