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和ACCESS写聊天室(二)
Oct 09 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
php笔记之:有规律大文件的读取与写入的分析
Apr 26 PHP
php中用加号与用array_merge合并数组的区别深入分析
Jun 03 PHP
php实现最简单的MVC框架实例教程
Sep 08 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
PHP实现自动对图片进行滚动显示的方法
Mar 12 PHP
php遍历解析xml字符串的方法
May 05 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
May 16 PHP
PHP怎样用正则抓取页面中的网址
Aug 09 PHP
利用PHP如何写APP接口详解
Aug 23 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 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
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
2014/06/12 PHP
PHP中feof()函数实例测试
2014/08/23 PHP
javascript some()函数用法详解
2014/11/13 PHP
YII框架中搜索分页jQuery写法详解
2016/12/19 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
2019/04/16 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
JS左右无缝滚动(一般方法+面向对象方法)
2012/08/17 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
微信小程序返回上一页传参并刷新过程解析
2019/12/13 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
PyCharm设置护眼背景色的方法
2018/10/29 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
2019/10/24 Python
学Python 3的理由和必要性
2019/11/19 Python
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
初中地理教学反思
2014/01/11 职场文书
纠纷协议书
2014/04/16 职场文书
英语教育专业自荐信
2014/05/29 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
2014年团支书工作总结
2014/11/14 职场文书
银行求职自荐信范文
2015/03/04 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
python中opencv实现图片文本倾斜校正
2021/06/11 Python
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python