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实现多服务器共享SESSION数据的方法
Mar 16 PHP
用PHP读取flv文件的播放时间长度
Sep 03 PHP
php中定时计划任务的实现原理
Jan 08 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
Jan 31 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
Jul 14 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
Sep 20 PHP
PHP封装的MSSql操作类完整实例
May 26 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
Aug 17 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
Mar 15 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
Laravel 自动生成验证的实例讲解:login / logout
Oct 14 PHP
详解Laravel框架的依赖注入功能
May 27 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
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
js 链式延迟执行DOME
2012/01/04 Javascript
js获取或设置当前窗口url参数的小例子
2013/10/14 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
详解Document.Cookie
2015/12/25 Javascript
jQuery实现三级菜单的代码
2016/05/09 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
2019/08/04 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
Python通过解析网页实现看报程序的方法
2014/08/04 Python
python制作websocket服务器实例分享
2016/11/20 Python
详解python开发环境搭建
2016/12/16 Python
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
python逆向入门教程
2018/01/15 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
Python运行不显示DOS窗口的解决方法
2018/10/22 Python
浅谈tensorflow中张量的提取值和赋值
2020/01/19 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
电大毕业生自我鉴定
2014/04/10 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
标枪加油稿
2015/07/22 职场文书
新教师教学工作总结
2015/08/12 职场文书
导游词之河北邯郸
2019/09/12 职场文书
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python