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脚本的10个技巧(3)
Oct 09 PHP
可定制的PHP缩略图生成程式(需要GD库支持)
Mar 06 PHP
PHP编实现程动态图像的创建代码
Sep 28 PHP
PHP JSON 数据解析代码
May 26 PHP
PHP获取文件绝对路径的代码(上一级目录)
May 29 PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 PHP
php实现文件下载更能介绍
Nov 23 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
Zend Framework缓存Cache用法简单实例
Mar 19 PHP
php生出随机字符串
Jul 06 PHP
PHP获取二叉树镜像的方法
Jan 17 PHP
php依赖注入知识点详解
Sep 23 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
全国FM电台频率大全 - 4 山西省
2020/03/11 无线电
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
Javascript获取当前日期的农历日期代码
2014/10/08 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
vue项目引入ts步骤(小结)
2019/10/31 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
Python远程桌面协议RDPY安装使用介绍
2015/04/15 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
设置python3为默认python的方法
2018/10/31 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
大学生农村教师实习自我鉴定
2013/09/21 职场文书
会计学自我鉴定
2014/02/06 职场文书
公务员试用期满考核材料
2014/05/22 职场文书
大学生活动总结模板
2014/07/02 职场文书
2014离婚协议书范文(3篇)
2014/11/29 职场文书
工程部岗位职责
2015/02/10 职场文书
劳资员岗位职责
2015/02/13 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript