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操作MongoDB时的整数问题及对策说明
May 02 PHP
PHP新手入门学习方法
May 08 PHP
PHP错误提示的关闭方法详解
Jun 23 PHP
php简单实现MVC
Feb 05 PHP
PHP中使用socket方式GET、POST数据实例
Apr 02 PHP
使用PHP uniqid函数生成唯一ID
Nov 18 PHP
解决出现SoapFault (looks like we got no XML document)的问题
Jun 24 PHP
php curl批处理实现可控并发异步操作示例
May 09 PHP
PHP笛卡尔积实现算法示例
Jul 30 PHP
PHP实现字符串的全排列详解
Apr 24 PHP
php扩展开发入门demo示例
Sep 23 PHP
Laravel 5.5 实现禁用用户注册示例
Oct 24 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中获取url与物理路径的总结
2013/06/21 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
Firebug入门指南(Firefox浏览器)
2010/08/21 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
javascript 兼容所有浏览器的DOM扩展功能
2012/08/01 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
jQuery子窗体取得父窗体元素的方法
2015/05/11 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
Python列表append和+的区别浅析
2015/02/02 Python
python中requests模块的使用方法
2015/04/08 Python
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
深入浅析python定时杀进程
2016/06/06 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
数据库的约束含义
2012/09/09 面试题
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
优秀员工个人的自我评价
2013/11/29 职场文书
简单的辞职信范文
2014/01/18 职场文书
班组长岗位职责
2014/03/03 职场文书
2014年双拥工作总结
2014/11/21 职场文书
2015党建工作简报
2015/07/21 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers