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之第七天
Oct 09 PHP
PHP中使用数组实现堆栈数据结构的代码
Feb 05 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
php中define用法实例
Jul 30 PHP
joomla组件开发入门教程
May 04 PHP
Yii2超好用的日期和时间组件(值得收藏)
May 05 PHP
php中的单引号、双引号和转义字符详解
Feb 16 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
Apr 01 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
laravel 实现用户登录注销并限制功能
Oct 24 PHP
PHP重载基础知识回顾
Sep 10 PHP
基于PHP实现生成随机水印图片
Dec 09 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进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
php 算法之实现相对路径的实例
2017/10/17 PHP
javascript学习网址备忘
2007/05/29 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
利用jQuery异步上传文件的插件用法详解
2017/07/19 jQuery
基于jQuery对象和DOM对象和字符串之间的转化实例
2017/08/08 jQuery
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
jQuery阻止事件冒泡实例分析
2018/07/03 jQuery
小程序实现抽奖动画
2020/04/16 Javascript
原生JS实现汇率转换功能代码实例
2020/05/13 Javascript
vue实现图片上传功能
2020/05/28 Javascript
django框架使用方法详解
2019/07/18 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
专科毕业生求职简历的自我评价
2013/10/12 职场文书
小学德育工作经验交流材料
2014/05/22 职场文书
文化产业实施方案
2014/06/07 职场文书
村党支部对照检查材料思想汇报
2014/09/28 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
党员查摆问题及整改措施
2014/10/10 职场文书
JavaScript文档对象模型DOM
2021/11/20 Javascript