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下一个非常全面获取图象信息的函数
Nov 20 PHP
php面向对象全攻略 (四)构造方法与析构方法
Sep 30 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
php中操作memcached缓存进行增删改查数据的实现代码
Aug 15 PHP
php实现的mongodb操作类
May 28 PHP
PHP实现事件机制的方法
Jul 10 PHP
PHP实现的随机IP函数【国内IP段】
Jul 20 PHP
php操作路径的经典方法(必看篇)
Oct 04 PHP
PHP制作登录异常ip检测功能的实例代码
Nov 16 PHP
PHPMailer发送邮件
Dec 28 PHP
php使用include 和require引入文件的区别
Feb 16 PHP
PHP下载远程图片的几种方法总结
Apr 07 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
世界第一个无线广播电台 KDKA
2021/03/01 无线电
咖啡常见的种类
2021/03/03 新手入门
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
jquery实现ajax提交form表单的方法总结
2014/03/03 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
2016/07/22 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
2017/03/04 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
python list语法学习(带例子)
2013/11/01 Python
利用ctypes提高Python的执行速度
2016/09/09 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
使用python实现对元素的长截图功能
2019/11/14 Python
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
总裁秘书岗位职责
2013/12/04 职场文书
2014全国两会心得体会
2014/03/17 职场文书
租房协议书
2014/04/10 职场文书
学校地质灾害防治方案
2014/06/10 职场文书
小学生校园广播稿
2014/09/28 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers