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 相关文章推荐
web方式ftp
Oct 09 PHP
火车头采集器3.0采集图文教程
Mar 17 PHP
php 多个submit提交表单 处理方法
Jul 07 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
php 启动报错如何解决
Jan 17 PHP
PHP实现无限极分类图文教程
Nov 25 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
Mar 17 PHP
2017年最新PHP经典面试题目汇总(上篇)
Mar 17 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
Sep 08 PHP
laravel admin实现分类树/模型树的示例代码
Jun 10 PHP
常见的5个PHP编码小陋习以及优化实例讲解
Feb 27 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/11/10 PHP
php zip文件解压类代码
2009/12/02 PHP
PHP 数组基础知识小结
2010/08/20 PHP
php文档更新介绍
2011/07/22 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
javascript中的缓动效果实现程序
2012/12/29 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
2014/04/15 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
Python判断Abundant Number的方法
2015/06/15 Python
python实现弹跳小球
2019/05/13 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
美国社交购物市场:MassGenie
2019/02/18 全球购物
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
介绍一些UNIX常用简单命令
2014/11/11 面试题
体育系毕业生自荐信
2014/06/28 职场文书
合作意向书
2014/07/30 职场文书
推普周活动总结
2014/08/28 职场文书
八项规定对照检查材料
2014/08/31 职场文书
标准离婚协议书(2014版)
2014/10/05 职场文书
小平小道观后感
2015/06/09 职场文书
大学军训通讯稿
2015/07/18 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书
学会Python数据可视化必须尝试这7个库
2021/06/16 Python