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 相关文章推荐
PHP通过session id 实现session共享和登录验证的代码
Jun 03 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
Jun 07 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
Jun 06 PHP
php分页代码学习示例分享
Feb 20 PHP
PHP5各个版本的新功能和新特性总结
Mar 16 PHP
php获取根域名方法汇总
Oct 28 PHP
php身份证号码检查类实例
Jun 18 PHP
php打造智能化的柱状图程序,用于报表等
Jun 19 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 PHP
PHP实现的简单排列组合算法应用示例
Jun 20 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
Oct 23 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
Aug 14 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
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
php跨服务器访问方法小结
2015/05/12 PHP
PHP制作登录异常ip检测功能的实例代码
2016/11/16 PHP
CL vs ForZe BO5 第三场 2.13
2021/03/10 DOTA
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
javascript的this关键字详解
2019/05/20 Javascript
js中的面向对象之对象常见创建方法详解
2019/12/16 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
详谈Object.defineProperty 及实现数据双向绑定
2020/07/18 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
女士鞋子、包包和服装在线,第一款10美元:ShoeDazzle
2019/07/26 全球购物
学校推普周活动总结
2015/05/07 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书