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 表单提交给自己
Jul 24 PHP
PHP 程序员也要学会使用“异常”
Jun 16 PHP
PHP sprintf()函数用例解析
May 18 PHP
用穿越火线快速入门php面向对象
Feb 22 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
Jun 03 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
php不使用copy()函数复制文件的方法
Mar 13 PHP
PHP生成器简单实例
May 13 PHP
Thinkphp实现短信验证注册功能
Oct 18 PHP
PHP中Trait及其应用详解
Feb 14 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
php pdo连接数据库操作示例
Nov 18 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 安全过滤函数代码
2011/05/07 PHP
php动态生成缩略图并输出显示的方法
2015/04/20 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
任意位置显示html菜单
2007/02/01 Javascript
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
JS实现文字掉落效果的方法
2015/05/06 Javascript
Three.js快速入门教程
2016/09/09 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
js实现随机点名小功能
2017/08/17 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
set在python里的含义和用法
2019/06/24 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
Python sorted对list和dict排序
2020/06/09 Python
Python如何将模块打包并发布
2020/08/30 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
班组长岗位职责
2014/03/03 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
2014年林业工作总结
2014/12/05 职场文书
教师节随笔
2015/08/15 职场文书
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python
windows server2008 开启端口的实现方法
2022/06/25 Servers