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 相关文章推荐
如何使用PHP中的字符串函数
Oct 09 PHP
php桌面中心(三) 修改数据库
Mar 11 PHP
discuz安全提问算法
Jun 06 PHP
PHP连接SQLServer2005 的问题解决方法
Jul 19 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
Dec 29 PHP
简单实现限定phpmyadmin访问ip的方法
Mar 05 PHP
PHP中定义数组常量(array常量)的方法
Nov 17 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
Zend Framework连接Mysql数据库实例分析
Mar 19 PHP
深入分析PHP优化及注意事项
Jul 04 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 PHP
PHP验证类的封装与使用方法详解
Jan 10 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爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
限制文本字节数js代码
2007/03/06 Javascript
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
angularjs select 赋值 ng-options配置方法
2018/02/28 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
Python程序退出方式小结
2017/12/09 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
HTML5实现无刷新修改URL的方法
2019/11/14 HTML / CSS
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
意大利奢侈品购物网站:Deliberti
2019/10/08 全球购物
优秀演讲稿范文
2013/12/29 职场文书
计划生育工作汇报
2014/10/28 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
行政申诉状范文
2015/05/20 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
学习委员竞选稿
2015/11/20 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
Java 关于String字符串原理上的问题
2022/04/07 Java/Android