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 相关文章推荐
如何做到多笔资料的同步
Oct 09 PHP
PHP小技巧搜集,每个PHPer都来露一手
Jan 02 PHP
php 定界符格式引起的错误
May 24 PHP
从wamp到xampp的升级之路
Apr 08 PHP
Linux系统递归生成目录中文件的md5的方法
Jun 29 PHP
PHP之预定义接口详解
Jul 29 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
Dec 20 PHP
分享php多功能图片处理类
May 15 PHP
详细解读php的命名空间(二)
Feb 21 PHP
php 后端实现JWT认证方法示例
Sep 04 PHP
php解决约瑟夫环算法实例分析
Sep 30 PHP
laravel框架学习笔记之组件化开发实现方法
Feb 01 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
用Apache反向代理设置对外的WWW和文件服务器
2006/10/09 PHP
The specified CGI application misbehaved by not returning a complete set of HTTP headers
2011/03/31 PHP
smarty基础之拼接字符串的详解
2013/06/18 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
js创建对象的几种常用方式小结(推荐)
2010/10/24 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
JS中setTimeout的巧妙用法前端函数节流
2016/03/24 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
JavaScript实现左右下拉框动态增删示例
2017/03/09 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
python机器学习之神经网络(一)
2017/12/20 Python
python+opencv实现动态物体识别
2018/01/09 Python
Python使用reportlab模块生成PDF格式的文档
2019/03/11 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
python单例模式的多种实现方法
2019/07/26 Python
PyTorch中permute的用法详解
2019/12/30 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
python 弧度与角度互转实例
2020/04/15 Python
python与pycharm有何区别
2020/07/01 Python
英国文胸专家:AmpleBosom.com
2018/02/06 全球购物
英国设计师珠宝网站:Joshua James Jewellery
2020/03/01 全球购物
俄罗斯在线服装店:STOLNIK
2021/03/07 全球购物
高三英语教学反思
2014/01/13 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
老公婚前保证书
2015/02/28 职场文书
全国助残日活动总结
2015/05/11 职场文书
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android