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 相关文章推荐
在smarty模板中使用PHP函数的方法
Apr 23 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
php获得网站访问统计信息类Compete API用法实例
Apr 02 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
Nov 23 PHP
php中的常用魔术方法汇总
Feb 14 PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 PHP
PHP合并数组函数array_merge用法分析
Feb 17 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
PHP批斗大会之缺失的异常详解
Jul 09 PHP
laravel返回统一格式错误码问题
Nov 04 PHP
TP5框架实现上传多张图片的方法分析
Mar 29 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
更改localhost为其他名字的方法
2014/02/10 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
编写针对IE的JS代码两种编写方法
2013/01/30 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
IE6已终止操作问题的2种情况及解决
2014/04/23 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
javascriptvoid(0)含义以及与&quot;#&quot;的区别讲解
2019/01/19 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
Python3编程实现获取阿里云ECS实例及监控的方法
2017/08/18 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
Python函数返回不定数量的值方法
2019/01/22 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
浅谈python 调用open()打开文件时路径出错的原因
2020/06/05 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
写一个方法1000的阶乘
2012/11/21 面试题
大学生涯自我鉴定
2014/01/16 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
班主任高考寄语
2015/02/26 职场文书
校园开放日新闻稿
2015/07/17 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python