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获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
PHP开发需要注意的安全问题
Sep 01 PHP
PHP通用检测函数集合
Feb 08 PHP
PHP获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
Mar 11 PHP
ThinkPHP整合百度Ueditor图文教程
Oct 21 PHP
将FCKeditor导入PHP+SMARTY的实现方法
Jan 15 PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 PHP
Netbeans 8.2将支持PHP7 更精彩
Jun 13 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
Sep 29 PHP
php实现QQ小程序发送模板消息功能
Sep 18 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实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
加速IE的Javascript document输出的方法
2010/12/02 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
JavaScript中匿名函数用法实例
2015/03/23 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
JavaScript for循环 if判断语句(学习笔记)
2017/10/11 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
详解JavaScript 异步编程
2020/07/13 Javascript
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
Python基于numpy灵活定义神经网络结构的方法
2017/08/19 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
Python正则表达式指南 推荐
2018/10/09 Python
基于python实现学生管理系统
2018/10/17 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
keras 多gpu并行运行案例
2020/06/10 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
英国精品买手店:Browns Fashion
2016/09/29 全球购物
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
高一英语教学反思
2014/01/22 职场文书
业务部主管岗位职责
2014/01/29 职场文书
小学老师寄语大全
2014/04/04 职场文书
工程部主管岗位职责
2015/02/12 职场文书
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript