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 相关文章推荐
提问的智慧(2)
Oct 09 PHP
献给php初学者(入门学习经验谈)
Oct 12 PHP
PHP数组无限分级数据的层级化处理代码
Dec 29 PHP
使用session判断用户登录用户权限(超简单)
Jun 08 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
php ZipArchive压缩函数详解实例
Nov 06 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
Jul 08 PHP
thinkphp使用phpmailer发送邮件的方法
Nov 24 PHP
PHP针对JSON操作实例分析
Jan 12 PHP
PHP实现删除字符串中任何字符的函数
Aug 11 PHP
浅谈php中urlencode与rawurlencode的区别
Sep 05 PHP
Yii2下session跨域名共存的解决方案
Feb 04 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版(5)
2006/10/09 PHP
php无限级分类实现方法分析
2016/10/19 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
js倒计时小程序
2013/11/05 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
基于promise.js实现nodejs的promises库
2014/07/06 NodeJs
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
Javascript实现购物车功能的详细代码
2018/05/08 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
JS获取月的第几周和年的第几周实例代码
2018/12/05 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
flask session组件的使用示例
2018/12/25 Python
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
英国标志性奢侈品牌:Burberry
2016/07/28 全球购物
中医专业应届生求职信
2013/11/17 职场文书
校运会广播稿100字
2014/01/27 职场文书
五一手机促销方案
2014/03/08 职场文书
新年寄语大全
2014/04/12 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
尊师重教演讲稿
2014/09/04 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
学校运动会加油词
2015/07/18 职场文书
学校教代会开幕词
2016/03/04 职场文书