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和MySQL保存和输出图片
Oct 09 PHP
基于qmail的完整WEBMAIL解决方案安装详解
Oct 09 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
Oct 25 PHP
PHP 命令行参数详解及应用
May 18 PHP
基于Discuz security.inc.php代码的深入分析
Jun 03 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
Jul 03 PHP
php下获取http状态的实现代码
May 09 PHP
使用symfony命令创建项目的方法
Mar 17 PHP
Zend Framework实现多文件上传功能实例
Mar 21 PHP
thinkPHP5.0框架命名空间详解
Mar 18 PHP
php实现大文件断点续传下载实例代码
Oct 01 PHP
PHP 实现缩略图
Mar 09 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入门
2006/10/09 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
AJAX的使用方法详解
2017/04/29 PHP
Javascript 自定义类型方法小结
2010/03/02 Javascript
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
angular十大常见问题
2017/03/07 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
js实现单元格拖拽效果
2020/02/10 Javascript
vue 通过绑定事件获取当前行的id操作
2020/07/27 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
武汉某公司的C#笔试题面试题
2015/12/25 面试题
会计辞职信范文
2014/01/15 职场文书
关于母亲节的感言
2014/02/04 职场文书
助学贷款贫困证明
2014/09/23 职场文书
个人借款协议书范本
2014/11/17 职场文书
2014年团工作总结
2014/11/27 职场文书
2015年植树节活动总结
2015/02/06 职场文书
小学一年级班主任工作经验交流材料
2015/11/02 职场文书
5分钟教你docker安装启动redis全教程(全新方式)
2021/05/29 Redis
python中取整数的几种方法
2021/11/07 Python