• 技术文章 >php教程 >php手册

    php实现高效获取图片尺寸的方法

    2016-06-06 20:15:57原创294

    这篇文章主要介绍了php实现高效获取图片尺寸的方法,可以快速高效的获取图片的尺寸,是非常实用的技巧,需要的朋友可以参考下

    本文实例讲述了php实现高效获取图片尺寸的方法。分享给大家供大家参考。具体分析如下:

    php 获取图片尺寸的方法我们可以使用 getimagesize 获取图片尺寸,但是效率是很低的,首先需要获取整个的图片信息,然后再进行操作,下面的例子更科学算法更好,我们一起来看看吧.

    方法可以用于快速获取图片尺寸信息,获取JPEG格式图片的尺寸信息,并且不需要下载读取整个图片,经测试这个函数不是对所有JPEG格式的图片都有效.

    1.获取JPEG格式图片的尺寸信息,代码如下:

    复制代码 代码如下:

    <?php
    /*
    *
    */

    // 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.实例代码如下:

    复制代码 代码如下:

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 获取 图片 尺寸
    上一篇:php针对cookie操作的队列操作类实例 下一篇:php第一次无法获取cookie问题处理
    Web大前端开发直播班

    相关文章推荐

    • 谁帮我看看这个程序?• 我想找出所有的预定义的数值,但为何所有文件都没• 用Apache Geronimo创建并部署blog和wiki 模块• PHP的XML分析函数转 介绍这个PHP里的XML分析函数的文章可不太有哦。。看过这篇就应该清楚点了吧...• 分享PHP技术开发技巧

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网