php图片的裁剪与缩放生成符合需求的缩略图


Posted in PHP onJanuary 11, 2013

图片太大且规格不统一,显示的控制需要靠JavaScript来完成,用在移动设备上时显示效果不好且流量巨大,需要对现有图片库的图片进行一次处理,生成符合移动设备用的缩略图,将原来客户端JS做的工作转移到服务器端用PHP的GD库来集中处理。

图片源与需要的大小

$src_img = "wallpaper.jpg"; 
$dst_w = 300; 
$dst_h = 200;

剪裁图像,保证图像区域最大化显示,并按比例缩放到指定大小。

一开始采用了 imagecopyresized 方法进行图像等比缩小,实际操作后发现,图像缩小后燥点非常严重。后再换用 imagecopyresampled (这里说一下,网上转载这个文章的很多,但是他们都把imagecopyresampled写成了imagecopysampled导致无法使用,所以我才重新贴了这个)方法,该方法会对图像进行重新采样,对缩小的图像进行平滑处理,使清晰度得到很大提高。

<?php 
list($src_w,$src_h)=getimagesize($src_img); // 获取原图尺寸 
$dst_scale = $dst_h/$dst_w; //目标图像长宽比 
$src_scale = $src_h/$src_w; // 原图长宽比 
if($src_scale>=$dst_scale) 
{ 
// 过高 
$w = intval($src_w); 
$h = intval($dst_scale*$w); 
$x = 0; 
$y = ($src_h - $h)/3; 
} 
else 
{ 
// 过宽 
$h = intval($src_h); 
$w = intval($h/$dst_scale); 
$x = ($src_w - $w)/2; 
$y = 0; 
} 
// 剪裁 
$source=imagecreatefromjpeg($src_img); 
$croped=imagecreatetruecolor($w, $h); 
imagecopy($croped,$source,0,0,$x,$y,$src_w,$src_h); 
// 缩放 
$scale = $dst_w/$w; 
$target = imagecreatetruecolor($dst_w, $dst_h); 
$final_w = intval($w*$scale); 
$final_h = intval($h*$scale); 
imagecopyresampled($target,$croped,0,0,0,0,$final_w,$final_h,$w,$h); 
// 保存 
$timestamp = time(); 
imagejpeg($target, "$timestamp.jpg"); 
imagedestroy($target); 
?>

希望大家能用到,还是比较方便的。
PHP 相关文章推荐
论坛头像随机变换代码
Oct 09 PHP
php array_flip() 删除数组重复元素
Jan 14 PHP
php strlen mb_strlen计算中英文混排字符串长度
Jul 10 PHP
php中time()和mktime()方法的区别
Sep 28 PHP
PHPThumb图片处理实例
May 03 PHP
PHP按行读取文件时删除换行符的3种方法
May 04 PHP
PHP中error_log()函数的使用方法
Jan 20 PHP
PHP如何通过AJAX方式实现登录功能
Nov 23 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
Jan 09 PHP
PHP使用反射机制实现查找类和方法的所在位置
Apr 22 PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 PHP
PHP 实现浏览记录并按日期分组
May 11 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
Jan 11 #PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 #PHP
PHP中header和session_start前不能有输出原因分析
Jan 11 #PHP
PHP跨时区(UTC时间)应用解决方案
Jan 11 #PHP
PHP编程函数安全篇
Jan 08 #PHP
php中定时计划任务的实现原理
Jan 08 #PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 #PHP
You might like
php调用mysql数据 dbclass类
2011/05/07 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
php递归函数中使用return的注意事项
2014/01/17 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
JS判断元素为数字的奇异写法分享
2012/08/01 Javascript
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
2014/09/25 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
js格式化时间的方法
2015/12/18 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
关于Layui Table隐藏列问题
2019/09/16 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
让 python 命令行也可以自动补全
2014/11/30 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
Python处理中文标点符号大集合
2018/05/14 Python
点球小游戏python脚本
2018/05/22 Python
使用pandas的DataFrame的plot方法绘制图像的实例
2018/05/24 Python
Python urlencode和unquote函数使用实例解析
2020/03/31 Python
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
高中生自我评语大全
2014/01/19 职场文书
光盘行动倡议书
2014/02/02 职场文书
文明好少年事迹材料
2014/08/19 职场文书
2014年医生工作总结
2014/11/21 职场文书
React更新渲染原理深入分析
2022/12/24 Javascript