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 相关文章推荐
Breeze 文章管理系统 v1.0.0正式发布
Dec 14 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
Jul 20 PHP
基于PHP输出缓存(output_buffering)的深入理解
Jun 13 PHP
PHP Global定义全局变量使用说明
Aug 15 PHP
php漏洞之跨网站请求伪造与防止伪造方法
Aug 15 PHP
php将session放入memcached的设置方法
Feb 14 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
Aug 18 PHP
yii用户注册表单验证实例
Dec 26 PHP
手把手编写PHP框架 深入了解MVC运行流程
Sep 19 PHP
Smarty3配置及入门语法
Feb 22 PHP
PHP基于回溯算法解决n皇后问题的方法示例
Nov 07 PHP
PHP面向对象程序设计之对象的遍历操作示例
Jun 12 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
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
QueryPath PHP 中的jQuery
2010/04/11 PHP
两款万能的php分页类
2015/11/12 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
基于jquery的滑动样例代码
2010/11/20 Javascript
Express.JS使用详解
2014/07/17 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
js拖拽功能实现代码解析
2016/11/28 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
python制作websocket服务器实例分享
2016/11/20 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
Python sqlite3查询操作过程解析
2020/02/20 Python
Python 合并拼接字符串的方法
2020/07/28 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
IE9下html5初试小刀
2010/09/21 HTML / CSS
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
授权委托书(完整版)
2014/09/10 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技