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 相关文章推荐
PHPMailer安装方法及简单实例
Nov 25 PHP
php 进度条实现代码
Mar 10 PHP
PHP学习 变量使用总结
Mar 24 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
Feb 06 PHP
浅析php中常量,变量的作用域和生存周期
Aug 10 PHP
php导出CSV抽象类实例
Sep 24 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
CI框架简单邮件发送类实例
May 18 PHP
深入理解PHP 数组之count 函数
Jun 13 PHP
PHP使用HTML5 FormData对象提交表单操作示例
Jul 02 PHP
PHP扩展类型及安装方式解析
Apr 27 PHP
Memcached介绍及php-memcache扩展安装
Apr 01 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迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
php开发环境配置记录
2011/01/14 PHP
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
wordpress之js库集合研究介绍
2007/08/17 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
js常用代码段收集
2011/10/28 Javascript
Jquery事件的连接使用示例
2013/06/18 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
2017/11/03 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
python解析xml文件实例分享
2013/12/04 Python
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
理解python中生成器用法
2017/12/20 Python
浅谈解除装饰器作用(python3新增)
2018/10/15 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
python实现LRU热点缓存及原理
2019/10/29 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
如何将PySpark导入Python的放实现(2种)
2020/04/26 Python
一级方程式赛车官方网上商店:F1 Store(支持中文)
2018/01/12 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
酒店开业庆典主持词
2014/03/21 职场文书
中学生励志演讲稿
2014/04/26 职场文书
医院合作协议书
2014/08/19 职场文书
校运会宣传稿大全
2015/07/23 职场文书
关于python中模块和重载的问题
2021/11/02 Python