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 相关文章推荐
Discuz板块横排显示图片的实现方法
May 28 PHP
PHP 向右侧拉菜单实现代码,测试使用中
Nov 03 PHP
PHP 获取远程文件大小的3种解决方法
Jul 11 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
Jan 22 PHP
PHP实现无限分类的实现方法
Nov 14 PHP
PHP实现的策略模式简单示例
Aug 25 PHP
PHP清除缓存的几种方法总结
Sep 12 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 PHP
php+mysql开发中的经验与常识小结
Mar 25 PHP
PHP 文件上传限制问题
Sep 01 PHP
通过代码实例解析PHP session工作原理
Dec 11 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 上传文件的方法(类)
2009/07/30 PHP
php学习笔记(三)操作符与控制结构
2011/08/06 PHP
destoon官方标签大全
2014/06/20 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
JS解密入门 最终变量劫持
2008/06/25 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
2014/05/11 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
原生js实现购物车
2020/09/23 Javascript
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
技校生自我鉴定范文
2013/09/26 职场文书
大学生入党思想汇报
2014/01/01 职场文书
幼儿园新学期寄语
2014/01/18 职场文书
全运会口号
2014/06/20 职场文书
党的群众路线个人对照检查材料
2014/09/23 职场文书
优秀护士事迹材料
2014/12/25 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
Python实现GIF动图以及视频卡通化详解
2021/12/06 Python
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python