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 相关文章推荐
example2.php
Oct 09 PHP
1.PHP简介
Oct 09 PHP
php学习笔记 [预定义数组(超全局数组)]
Jun 09 PHP
php图片上传存储源码并且可以预览
Aug 26 PHP
Php Ctemplate引擎开发相关内容
Mar 03 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
关于PHP自动判断字符集并转码的详解
Jun 26 PHP
PHP使用header()输出图片缓存实例
Dec 09 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
Feb 02 PHP
PHP使用Pthread实现的多线程操作实例
Nov 14 PHP
php实现查询功能(数据访问)
May 23 PHP
PHP+Ajax实现的检测用户名功能简单示例
Feb 12 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
拖拉表格的JS函数
2008/11/20 Javascript
this和执行上下文实现代码
2010/07/01 Javascript
各情景下元素宽高的获取实现代码
2011/09/13 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
javascript常用的正则表达式实例
2014/05/15 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
详解webpack babel的配置
2018/01/09 Javascript
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
详解python配置虚拟环境
2019/04/08 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
如何使用Python抓取网页tag操作
2020/02/14 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
加拿大百叶窗和窗帘定制网站:Blinds
2017/01/30 全球购物
请说出几个常用的异常类
2013/01/08 面试题
兼职学生的自我评价
2013/11/24 职场文书
计划生育工作汇报
2014/10/28 职场文书
幼儿教师个人总结
2015/02/05 职场文书
个人合作协议范本
2015/08/06 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
python如何做代码性能分析
2021/04/26 Python
Java8中接口的新特性使用指南
2021/11/01 Java/Android
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB