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调用Oracle存储过程
Oct 09 PHP
php一句话cmdshell新型 (非一句话木马)
Apr 18 PHP
php 图像函数大举例(非原创)
Jun 20 PHP
php 过滤器实现代码
Aug 09 PHP
PHP中文分词的简单实现代码分享
Jul 17 PHP
php 操作符与控制结构
Mar 07 PHP
php登陆页的密码处理方式分享
Oct 14 PHP
PHP与MYSQL中UTF8 中文排序示例代码
Oct 23 PHP
PHP基于SPL实现的迭代器模式示例
Apr 22 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
Apr 30 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 PHP
如何用PHP websocket实现网页实时聊天
May 26 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
php的控制语句
2006/10/09 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
php实现session共享的实例方法
2019/09/19 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
浅谈JavaScript的闭包函数
2016/12/08 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
webpack进阶——缓存与独立打包的用法
2017/08/02 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
详解express使用vue-router的history踩坑
2019/06/05 Javascript
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
2019/09/07 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
全面理解Python中self的用法
2016/06/04 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
使用python实现飞机大战游戏
2020/03/23 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
优秀幼教自荐信
2014/02/03 职场文书
公务员试用期满考核材料
2014/05/22 职场文书
应用心理学专业求职信
2014/08/04 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
2016高考寄语集锦
2015/12/04 职场文书
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers