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 常见郁闷问题答解
Nov 25 PHP
Blitz templates 最快的PHP模板引擎
Apr 06 PHP
php图片加水印原理(超简单的实例代码)
Jan 18 PHP
php 使用GD库为页面增加水印示例代码
Mar 24 PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 PHP
php+mysqli事务控制实现银行转账实例
Jan 29 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
Sep 09 PHP
php实现URL加密解密的方法
Nov 17 PHP
PHP批量获取网页中所有固定种子链接的方法
Nov 18 PHP
php die()与exit()的区别实例详解
Dec 03 PHP
PHP面向对象学习之parent::关键字
Jan 18 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
Nov 24 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/03/15 PHP
PHP编程风格规范分享
2014/01/15 PHP
php实现把数组按指定的个数分隔
2014/02/17 PHP
php实现文章评论系统
2019/02/18 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
js event事件的传递与冒泡处理
2009/12/06 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
vue实现验证码输入框组件
2017/12/14 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
javascript中的隐式调用
2018/02/10 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
2019/08/03 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
jquery实现直播视频弹幕效果
2020/02/25 jQuery
JS实现拖拽元素时与另一元素碰撞检测
2020/08/27 Javascript
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
利用python画一颗心的方法示例
2017/01/31 Python
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
如何完美的建立一个python项目
2020/10/09 Python
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
幼儿园老师辞职信
2014/01/20 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python