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 处理上百万条的数据库如何提高处理查询速度
Feb 08 PHP
PHP is_dir() 判断给定文件名是否是一个目录
May 10 PHP
PHP JSON 数据解析代码
May 26 PHP
php 模拟POST|GET操作实现代码
Jul 20 PHP
PHP得到某段时间区间的时间戳 php定时任务
Apr 12 PHP
php不写闭合标签的好处
Mar 04 PHP
php模仿asp Application对象在线人数统计实现方法
Jan 04 PHP
浅析iis7.5安装配置php环境
May 10 PHP
PHP 等比例缩放图片详解及实例代码
Sep 18 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
Nov 20 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
php 使用mpdf实现指定字段配置字体样式的方法
Jul 29 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 正则学习实例
2008/07/30 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
简单实用的PHP防注入类实例
2014/12/05 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
jQuery使用手册之一
2007/03/24 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
九种js弹出对话框的方法总结
2013/03/12 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
Python使用MONGODB入门实例
2015/05/11 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
python数据结构之链表的实例讲解
2017/07/25 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
基于Python List的赋值方法
2018/06/23 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
环境工程求职简历的自我评价范文
2013/10/24 职场文书
《和我们一样享受春天》教学反思
2014/02/07 职场文书
企业宗旨标语
2014/06/10 职场文书
银行转正自我鉴定
2014/09/29 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js
python3中apply函数和lambda函数的使用详解
2022/02/28 Python