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 相关文章推荐
php 魔术方法使用说明
Oct 20 PHP
PHP安全技术之 实现php基本安全
Sep 04 PHP
php模板中出现空行解决方法
Mar 08 PHP
centos 5.6 升级php到5.3的方法
May 14 PHP
php 按指定元素值去除数组元素的实现方法
Nov 04 PHP
CURL状态码列表(详细)
Jun 27 PHP
thinkphp缓存技术详解
Dec 09 PHP
了解PHP的返回引用和局部静态变量
Jun 04 PHP
解读PHP中的垃圾回收机制
Aug 10 PHP
php创建桌面快捷方式实现方法
Dec 31 PHP
PHP实现判断数组是一维、二维或几维的方法
Feb 06 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
May 02 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
php中设置index.php文件为只读的方法
2013/02/06 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
yii添删改查实例
2015/11/16 PHP
JavaScript静态的动态
2006/09/18 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
Vue中控制v-for循环次数的实现方法
2018/09/26 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
Python+Django在windows下的开发环境配置图解
2009/11/11 Python
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
python提取字典key列表的方法
2015/07/11 Python
Python手机号码归属地查询代码
2016/05/04 Python
Python探索之修改Python搜索路径
2017/10/25 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
一道输出判断型Java面试题
2014/10/01 面试题
小学三八妇女节活动方案
2014/03/16 职场文书
中学生运动会口号
2014/06/07 职场文书
五心教育心得体会
2014/09/04 职场文书
数学教师个人总结
2015/02/06 职场文书
2015年信息中心工作总结
2015/05/25 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
运动会宣传稿50字
2015/07/23 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers
python中validators库的使用方法详解
2022/09/23 Python