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 相关文章推荐
模拟SQLSERVER的两个函数:dateadd(),datediff()
Oct 09 PHP
PHP解决URL中文GBK乱码问题的两种方法
Jun 03 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
php实现的树形结构数据存取类实例
Nov 29 PHP
php从数组中随机选择若干不重复元素的方法
Mar 14 PHP
PHP附件下载中文名称乱码的解决方法
Dec 17 PHP
PHP常见数组函数用法小结
Mar 21 PHP
Yii实现的多级联动下拉菜单
Jul 13 PHP
PHP搭建大文件切割分块上传功能示例
Jan 04 PHP
PHP基于SPL实现的迭代器模式示例
Apr 22 PHP
PHP date()格式MySQL中插入datetime方法
Jan 29 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
Apr 23 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
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
JS常见构造模式实例对比分析
2018/08/27 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
微信小程序登录session的使用
2019/03/17 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
javascript实现计算器功能
2020/03/30 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
在Vue中创建可重用的 Transition的方法
2020/06/02 Javascript
Python List cmp()知识点总结
2019/02/18 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
2019/08/10 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
PHP统计代码行数的小代码
2019/09/19 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
英国女性时尚品牌:Apricot
2018/12/04 全球购物
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
中秋节国旗下演讲稿
2014/09/05 职场文书
党风廉政建设调研报告
2015/01/01 职场文书
导游词范文
2015/02/13 职场文书
幼儿园辞职信
2015/05/13 职场文书
初中英语教学反思范文
2016/02/15 职场文书
python中使用redis用法详解
2022/12/24 Redis