zoukankan      html  css  js  c++  java
  • PHP读取FLASH 文件信息

    <?php
    /*
    示例:
    $file = '/data/ad_files/5/5.swf';
    $flash = new FLASH();
    $flash = $flash->getSwfInfo($file);
    echo "
    文件的宽高是:".$flash["width"].":".$info["height"];
    echo "
    文件版本是".$flash["version"];
    echo "
    文件帧数量是".$flash["frameCount"];
    echo "
    文件帧速率是".$flash["frameRate"];
    echo "
    文件背景颜色是".$flash["bgColor"];
    */
    class FLASH
    {
    //是否返回背景色
    public $need_back_color = false ;

    //是否返回版本
    public $need_version = false ;

    //是否返回帧速率
    public $need_frameRate = false ;

    //是否返回帧数量
    public $need_frameCount = false ;

    public function __construct()
    {

    }

    public function getSwfInfo( $filename )
    {
    if ( file_exists($filename) ) {
    //echo "文件的修改时间:".date("M d Y H:i:s.", filemtime($filename))."
    ";
    } else {
    //echo "目标文件不存在!";
    return array( "error" => $filename ) ;
    }

    //打开文件
    $rs = fopen($filename,"r");

    //读取文件的数据
    $str = fread( $rs , filesize( $filename ) ) ;
    ///
    if($str[0] == "F")
    {
    //echo "
    文件已是解压缩的文件:";
    } else {
    $first = substr($str,0,8);
    $last = substr($str,8);
    //
    $last = gzuncompress($last);
    //
    $str = $first . $last ;
    $str[0] = "F";
    //echo "
    解压缩后的文件信息:";
    }

    $info = $this->getInfo( $str );
    fclose ( $rs ) ;
    return $info;
    }

    private function mydecbin($str,$index)
    {
    $fbin = decbin(ord($str[$index]));
    while(strlen($fbin)<8)$fbin="0".$fbin;
    return $fbin;
    }

    private function colorhex($data)
    {
    $tmp = dechex($data);
    if ( strlen($tmp)<2 ) {
    $tmp='0' . $tmp ;
    }
    return $tmp;
    }

    private function getInfo( $str )
    {
    //换算成二进制
    $fbin = $this->mydecbin( $str , 8 ) ;

    //计算rec的单位长度
    $slen = bindec( substr( $fbin , 0 , 5 ) );

    //计算rec所在的字节
    $recsize = $slen * 4 + 5 ;
    $recsize = ceil( $recsize / 8 ) ;

    //rec的二进制
    $recbin = $fbin ;
    for( $i = 9 ; $i < $recsize + 8 ; $i++ )
    {
    $recbin .= $this->mydecbin( $str ,$i );
    }

    //rec数据
    $rec = array();
    for( $i = 0 ; $i < 4 ; $i++ )
    {
    $rec[] = bindec( substr( $recbin , 5 + $i * $slen , $slen ) ) / 20 ;
    }

    if ( $this->need_back_color ) {
    //背景颜色
    for( $i = $recsize + 12 ; $i < strlen ( $str ) ; $i ++ )
    {
    if ( ord( $str[$i] ) == 67 && ord( $str[$i+1] ) == 2 )
    {
    $bgcolor = $this->colorhex(ord($str[$i+2])).$this->colorhex(ord($str[$i+3])).$this->colorhex(ord($str[$i+4]));
    break;
    }
    }
    }

    if ( $this->need_version ) {
    //版本
    $version = ord( $str[3] );
    }
    if ( $this->need_frameRate ) {
    //帧速率
    $frameRate = ord( $str[$recsize + 8] ) / 256 + ord( $str[$recsize + 9] ) ;
    }

    if ( $this->need_frameCount ) {
    //帧数量
    $frameCount = ord( $str[$recsize + 11] ) * 256 + ord( $str[$recsize + 10] );
    }

    return array ( "bgColor" => $bgcolor ,
    "version" => $version ,
    "frameRate" => $frameRate ,
    "frameCount" => $frameCount ,
    'width'=>$rec[1],
    'height'=>$rec[3]
    );
    }
    }

    ?>
  • 相关阅读:
    sql server中的 SET NOCOUNT ON 的含义
    SQL Server 中的嵌套事务与@@TranCount(转)
    数据库中的主键与外键的关系,通俗易懂
    模板制作
    DELPHI中MDI子窗口的关闭和打开
    Entity Framework 基础
    WPF使用HierarchicalDataTemplate绑定Dictionary生成TreeView
    WPF新手之如何将数据绑定到TreeView
    WPF数据验证(5)―― 错误模板
    WPF DataGrid 获取选中 一行 或者 多行
  • 原文地址:https://www.cnblogs.com/liangle/p/2512621.html
Copyright © 2011-2022 走看看