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实现的获取网站备案信息查询代码(360)
Sep 23 PHP
php设计模式之单例模式使用示例
Jan 20 PHP
PHP中strlen()和mb_strlen()的区别浅析
Jun 19 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
May 13 PHP
Zend Framework教程之Zend_Registry对象用法分析
Mar 22 PHP
Composer设置忽略版本匹配的方法
Apr 27 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
PHP开发中csrf攻击的简单演示和防范
May 07 PHP
PC端微信扫码支付成功之后自动跳转php版代码
Jul 07 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
PHP实现的杨辉三角求解算法分析
Mar 11 PHP
PHP数组基本用法与知识点总结
Jun 02 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
什么是短波收听SWL
2021/03/01 无线电
php下载文件的代码示例
2012/06/29 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
JavaScript 盒模型 尺寸深入理解
2012/12/31 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
jQuery.form插件的使用及跨域异步上传文件
2016/04/27 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
2016/06/17 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
[05:24]TI9采访——教练
2019/08/24 DOTA
python正则表达式match和search用法实例
2015/03/26 Python
Python实现在线程里运行scrapy的方法
2015/04/07 Python
Python打印输出数组中全部元素
2018/03/13 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
在Pycharm中安装Pandas库方法(简单易懂)
2021/02/20 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
军人违纪检讨书
2014/02/04 职场文书
北京申奥口号
2014/06/19 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
作风建设整改方案
2014/10/27 职场文书
5.12护士节活动总结
2015/02/10 职场文书
综合素质评价思想道德自我评价
2015/03/09 职场文书
2019安全宣传标语大全
2019/08/14 职场文书