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使之能同时支持GIF和JPEG
Oct 09 PHP
如何对PHP程序中的常见漏洞进行攻击(下)
Oct 09 PHP
基于mysql的bbs设计(二)
Oct 09 PHP
php 连接mssql数据库 初学php笔记
Mar 01 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
Apr 17 PHP
php中删除数组的第一个元素和最后一个元素的函数
Mar 07 PHP
php简单smarty入门程序实例
Jun 11 PHP
PHP模拟QQ登录的方法
Jul 29 PHP
利用PHP判断文件是否为图片的方法总结
Jan 06 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 PHP
php json转换相关知识(小结)
Dec 21 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 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下HTTP Response中的Chunked编码实现方法
2008/11/19 PHP
PHP 加密解密内部算法
2010/04/22 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
jQuery 调用WebService 实例讲解
2016/06/28 Javascript
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
[02:25]DOTA2英雄基础教程 生死判决瘟疫法师
2013/12/06 DOTA
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
python自定义类并使用的方法
2015/05/07 Python
python中defaultdict的用法详解
2017/06/07 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
python 读入多行数据的实例
2018/04/19 Python
基于python实现名片管理系统
2018/11/30 Python
用Python解决x的n次方问题
2019/02/08 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
进修护士自我鉴定
2013/10/14 职场文书
创业计划书的主要内容有哪些
2014/01/29 职场文书
团支部建设方案
2014/05/02 职场文书
高中同学会活动方案
2014/08/14 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书
《女娲补天》读后感5篇
2019/12/31 职场文书
python中如何对多变量连续赋值
2021/06/03 Python
Python办公自动化解决world文件批量转换
2021/09/15 Python
Python 统计序列中元素的出现频度
2022/04/26 Python
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python