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
BBS(php &amp; mysql)完整版(二)
Oct 09 PHP
php读取flash文件高宽帧数背景颜色的方法
Jan 06 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
Apr 17 PHP
PHP扩展Memcache分布式部署方案
Dec 06 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
Mar 07 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
Dec 28 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
Mar 15 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
统计PHP目录中的文件数方法
Mar 05 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
Mar 18 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面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
PHP Array交叉表实现代码
2010/08/05 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
js document.write()使用介绍
2014/02/21 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
python递归查询菜单并转换成json实例
2017/03/27 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
python自动重试第三方包retrying模块的方法
2018/04/24 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
PyQt5实现简易电子词典
2019/06/25 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
python实现简单颜色识别程序
2020/02/19 Python
Noon埃及:埃及在线购物
2019/11/26 全球购物
医院护士求职自荐信格式
2013/09/21 职场文书
祖国在我心中演讲稿300字
2014/05/04 职场文书
学校与家长安全责任书
2014/07/23 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
解决Goland 同一个package中函数互相调用的问题
2021/05/06 Golang
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python