php实现高效获取图片尺寸的方法


Posted in PHP onDecember 12, 2014

本文实例讲述了php实现高效获取图片尺寸的方法。分享给大家供大家参考。具体分析如下:

php 获取图片尺寸的方法我们可以使用 getimagesize 获取图片尺寸,但是效率是很低的,首先需要获取整个的图片信息,然后再进行操作,下面的例子更科学算法更好,我们一起来看看吧.

方法可以用于快速获取图片尺寸信息,获取JPEG格式图片的尺寸信息,并且不需要下载读取整个图片,经测试这个函数不是对所有JPEG格式的图片都有效.

1.获取JPEG格式图片的尺寸信息,代码如下:

<?php 

/* 

* https://3water.com

*/ 

 

// Retrieve JPEG width and height without downloading/reading entire image. 

function getjpegsize($img_loc) { 

    $handle = fopen($img_loc, "rb") or die("Invalid file stream."); 

    $new_block = NULL; 

    if(!feof($handle)) { 

        $new_block = fread($handle, 32); 

        $i = 0; 

        if($new_block[$i]=="xFF" && $new_block[$i+1]=="xD8" && $new_block[$i+2]=="xFF" && $new_block[$i+3]=="xE0") { 

            $i += 4; 

            if($new_block[$i+2]=="x4A" && $new_block[$i+3]=="x46" && $new_block[$i+4]=="x49" && $new_block[$i+5]=="x46" && $new_block[$i+6]=="x00") { 

                 

// Read block size and skip ahead to begin cycling through blocks in search of SOF marker 

 

                $block_size = unpack("H*", $new_block[$i] . $new_block[$i+1]); 

                $block_size = hexdec($block_size[1]); 

                while(!feof($handle)) { 

                    $i += $block_size; 

                    $new_block .= fread($handle, $block_size); 

                    if($new_block[$i]=="xFF") { 

                         

// New block detected, check for SOF marker 

 

                        $sof_marker = array("xC0", "xC1", "xC2", "xC3", "xC5", "xC6", "xC7", "xC8", "xC9", "xCA", "xCB", "xCD", "xCE", "xCF"); 

                        if(in_array($new_block[$i+1], $sof_marker)) { 

                             

// SOF marker detected. Width and height information is contained in bytes 4-7 after this byte. 

 

                            $size_data = $new_block[$i+2] . $new_block[$i+3] . $new_block[$i+4] . $new_block[$i+5] . $new_block[$i+6] . $new_block[$i+7] . $new_block[$i+8]; 

                            $unpacked = unpack("H*", $size_data); 

                            $unpacked = $unpacked[1]; 

                            $height = hexdec($unpacked[6] . $unpacked[7] . $unpacked[8] . $unpacked[9]); 

                            $width = hexdec($unpacked[10] . $unpacked[11] . $unpacked[12] . $unpacked[13]); 

                            return array($width, $height); 

                        } else { 

                             

// Skip block marker and read block size 

 

                            $i += 2; 

                            $block_size = unpack("H*", $new_block[$i] . $new_block[$i+1]); 

                            $block_size = hexdec($block_size[1]); 

                        } 

                    } else { 

                        return FALSE; 

                    } 

                } 

            } 

        } 

    } 

    return FALSE; 

} 

?>

2.实例代码如下:
$url='http://www.xxxx.com/images/1331189004_28093400.jpg'; 

$image_content = file_get_contents($url); 

$image = imagecreatefromstring($image_content); 

$width = imagesx($image); 

$height = imagesy($image); 

echo $width.'*'.$height."nr";

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
asp和php下textarea提交大量数据发生丢失的解决方法
Jan 20 PHP
php iconv() : Detected an illegal character in input string
Dec 05 PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
PHP中的命名空间相关概念浅析
Jan 22 PHP
学习php设计模式 php实现单例模式(singleton)
Dec 07 PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 PHP
php简单实现多维数组排序的方法
Sep 30 PHP
php 数组处理函数extract详解及实例代码
Nov 23 PHP
php中时间函数date及常用的时间计算
May 12 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
PDO::commit讲解
Jan 27 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 PHP
CI框架中cookie的操作方法分析
Dec 12 #PHP
jQuery Mobile + PHP实现文件上传
Dec 12 #PHP
分享一段PHP制作的中文拼音首字母工具类
Dec 11 #PHP
PHP截取指定图片大小的方法
Dec 10 #PHP
php实现图片添加描边字和马赛克的方法
Dec 10 #PHP
PHP生成条形图的方法
Dec 10 #PHP
php自定文件保存session的方法
Dec 10 #PHP
You might like
SMARTY学习手记
2007/01/04 PHP
PHP中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
Yii学习总结之安装配置
2015/02/22 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
有关PHP 中 config.m4 的探索
2020/08/26 PHP
utf8的编码算法 转载
2006/12/27 Javascript
学习YUI.Ext 第四天--对话框Dialog的使用
2007/03/10 Javascript
JavaScript prototype 使用介绍
2013/08/29 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
ECMAScript6变量的解构赋值实例详解
2017/09/19 Javascript
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
2017/12/28 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
python查看FTP是否能连接成功的方法
2015/07/30 Python
快速了解python leveldb
2018/01/18 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
静态成员和非静态成员的区别
2012/05/12 面试题
酒店端午节促销方案
2014/02/18 职场文书
法律专业求职信
2014/05/24 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript