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 相关文章推荐
JAVA/JSP学习系列之四
Oct 09 PHP
Apache2中实现多网站域名绑定的实现方法
Jun 01 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
Sep 30 PHP
如何使用PHP实现javascript的escape和unescape函数
Jun 29 PHP
PHP引用符&amp;的用法详细解析
Aug 22 PHP
php生成静态页面的简单示例
Apr 17 PHP
PHP写的资源下载防盗链类分享
May 12 PHP
thinkphp使用phpmailer发送邮件的方法
Nov 24 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
CI框架整合widget(页面格局)的方法
May 17 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 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
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
Python+django实现简单的文件上传
2016/08/17 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
Python爬虫设置代理IP的方法(爬虫技巧)
2018/03/04 Python
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
python实现双色球随机选号
2020/01/01 Python
pycharm sciview的图片另存为操作
2020/06/01 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
广告业务员岗位职责
2014/02/06 职场文书
煤矿机修工岗位职责
2014/02/07 职场文书
房产委托公证书
2014/04/08 职场文书
运动会演讲稿50字
2014/08/25 职场文书
销售代理协议书
2014/09/30 职场文书
2014年工会工作总结
2014/11/12 职场文书
三好学生个人总结
2015/02/15 职场文书
书法社团活动总结
2015/05/07 职场文书