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代码
Dec 06 PHP
PHP文件上传实例详解!!!
Jan 02 PHP
php Ajax乱码
Apr 09 PHP
PHP 编写大型网站问题集
May 07 PHP
PHP无敌近乎加密方式!
Jul 17 PHP
PHP的加密方式及原理
Jun 14 PHP
php定义数组和使用示例(php数组的定义方法)
Mar 29 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
Sep 30 PHP
Yii2前后台分离及migrate使用(七)
May 04 PHP
Laravel5中Cookie的使用详解
May 03 PHP
tp5.1 框架数据库-数据集操作实例分析
May 26 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实现动态执行代码的方法
2016/03/25 PHP
PHP实现浏览器格式化显示XML的方法示例
2019/01/22 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
2012/04/07 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
2013/07/17 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
谈一谈js中的执行环境及作用域
2016/03/30 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
简单谈谈Vue 模板各类数据绑定
2016/09/25 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
Python中取整的几种方法小结
2017/01/06 Python
python实现批量修改文件名代码
2017/09/10 Python
DataFrame中的object转换成float的方法
2018/04/10 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python