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]
    );
    }
    }

    ?>
  • 相关阅读:
    AtCoder Beginner Contest 205
    Codeforces Round #725 (Div. 3)
    Educational Codeforces Round 110 (Rated for Div. 2)【A
    Codeforces Round #722 (Div. 2)
    AtCoder Beginner Contest 203(Sponsored by Panasonic)
    AISing Programming Contest 2021(AtCoder Beginner Contest 202)
    PTA 520 钻石争霸赛 2021
    Educational Codeforces Round 109 (Rated for Div. 2)【ABCD】
    AtCoder Beginner Contest 200 E
    Educational Codeforces Round 108 (Rated for Div. 2)【ABCD】
  • 原文地址:https://www.cnblogs.com/rmbteam/p/2205246.html
Copyright © 2011-2022 走看看