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截取中文字符串的问题
Jul 12 PHP
Smarty+QUICKFORM小小演示
Feb 25 PHP
YII路径的用法总结
Jul 09 PHP
PHP+MYSQL中文乱码问题
Jul 01 PHP
php超快高效率统计大文件行数
Jul 05 PHP
PHP-FPM之Chroot执行环境详解
Aug 03 PHP
我整理的PHP 7.0主要新特性
Jan 07 PHP
PHP.vs.JAVA
Apr 29 PHP
php封装的page分页类完整实例
Oct 18 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
May 05 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 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中的array数组类型分析说明
2010/07/27 PHP
PHP中读写文件实现代码
2011/10/20 PHP
PHP中strtotime函数使用方法详解
2011/11/27 PHP
初识ThinkPHP控制器
2016/04/07 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
Vue和Bootstrap的整合思路详解
2017/06/30 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
vue输入节流,避免实时请求接口的实例代码
2019/10/30 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
python简单文本处理的方法
2015/07/10 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
Python自定义线程池实现方法分析
2018/02/07 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
python中的句柄操作的方法示例
2019/06/20 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
手术室护士自我鉴定
2013/10/14 职场文书
计算机专业求职信
2014/06/02 职场文书
个人收入证明模板
2014/09/18 职场文书
承诺保证书格式
2015/02/28 职场文书
军训结束新闻稿
2015/07/17 职场文书
会计做账心得体会
2016/01/22 职场文书
CSS 圆形进度栏
2021/04/06 HTML / CSS