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文件怎么打开 如何执行php文件
Dec 21 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
Jun 07 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
Sep 04 PHP
win7+apache+php+mysql环境配置操作详解
Jun 10 PHP
PHP整数取余返回负数的相关解决方法
May 15 PHP
一个简洁实用的PHP缓存类完整实例
Jul 26 PHP
yii中widget的用法
Dec 03 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
开启PHP的伪静态模式
Dec 31 PHP
PHP递归遍历指定文件夹内的文件实现方法
Nov 15 PHP
PHP PDOStatement::bindParam讲解
Jan 30 PHP
php apache开启跨域模式过程详解
Jul 08 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版本实现代码
2012/09/15 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
2011/08/09 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
jQuery网页右侧广告跟随滚动代码分享
2020/04/20 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
es6新特性之 class 基本用法解析
2018/05/05 Javascript
详解Eslint 配置及规则说明
2018/09/10 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
Python去掉字符串中空格的方法
2014/03/11 Python
Python生成随机验证码的两种方法
2015/12/22 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
美国在线珠宝商店:SZUL
2017/02/11 全球购物
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
聚网科技C++面试笔试题
2015/09/01 面试题
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
建筑工程管理专业自荐信范文
2013/12/28 职场文书
关于祖国的演讲稿
2014/05/04 职场文书
开展读书活动总结
2014/06/30 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
对Golang中的FORM相关字段理解
2021/05/02 Golang
MySQL详细讲解变量variables的用法
2022/06/21 MySQL