백엔드 개발 PHP 튜토리얼 PHP停解析swf文件头

PHP停解析swf文件头

Jun 13, 2016 pm 12:51 PM
bit swf

PHP下解析swf文件头

近日,在
CSDN
论坛上看到一个帖子,想要实现用PHP来得到swf文件帧数的功能,一些网友回复说不可能,其实是他们对swf文件格式不了解,swf文件格式规范是开放的,而且也可以找到相当多的关于直接用PHP处理swf文件的,包括解析文件头,生成swf文件等。利用闲暇时间,我也写了一个粗陋的解析swf文件的类。
要想解析swf文件头,首先要弄清楚的当然是
swf文件格式规范
。规范中对swf文件格式作了详细的说明。关于swf文件头,它是由以下几个部分组成:
+--------+-----+--------+----------+----+----+
|文件标识|版本|文件大小|RECT字段|帧频|帧数|
+--------+-----+--------+----------+----+----+
??????? 其中“文件标识”为3个字节,包括文件压缩标志。这3个字节的内容为“FWS”或“CWS”,以‘C’开头的表示swf文件是采用的压缩输出(从RECT字段开始至文件结尾,采用Zlib标准进行文件压缩)。
??????? “版本”为一个字节,存储8位字长的无符号整数,将swf文件的导出版本以16进制方式存储在该字节,如导出版本为7,则该字节存储值为0x07,而不是‘7’对应的ASCII值(0x37)。
??????? “文件大小”存储占用4个字节,为32位无符号整数,将未压缩的swf文件大小以16进制形式存入该4个字段,值得注意的是,swf文件存储是按照little-endian,即低字节在前的“小尾”方式存储的,解析时,需要注意字节序。如一个swf文件大小为471字节,则该4个字节,由低位到高位,存储的内容将是0xd7,0x01,0x00,0x00。
??????? “帧频”占用两个字节,表示每秒播放的帧数,存储方式是8.8共16位的定点数,整数部分在高位(即第二个字节),小数部分在低位(第一个字节),并按字节对齐。如小数7.5表示为16进制是0x07.80,按照低位在前,高位在后表示,这16位将存储为如下的2进制代码10000000 00000111。
??????? “帧数”占用两个字节,为16位无符号整数,表示swf文件的总帧数。存储方式类似于“文件大小”存储方式。
??????? 难理解的是RECT字段,该字段采用swf文件格式规范中定义的“位值”(bit_value)进行存储的,这种存储特征是可以节约字节数,但数值是跨字节的。该段存储内容是用‘twip’(翻译为‘缇’,1pixel = 20twips)单位表示的播放窗口的尺寸。分为Nbits,表示后面字段的bit_value位长;Xmin,Xmax,Ymin,Ymax分别表示X,Y轴方向上的最小和最大值。
??????? 先说一下bit_value,其特点是不管字节区分,按照最小位数(bits)将值连续存储,在末字节中空位补0,比如两个9位表示的无符号值7,8将占用3个字节,表示为2进制就是:
??????? 00000011 10000010 00000000
??????? 将3个字节按位连在一起,前9位值为7,再9位值为8,在第3个字节的其他空位全部补0。简单了解了bit_value表示方式,再说RECT结构,该字段前5位(bit)为Nbits字段,表示后面字段的bit_value位长,是一个无符号数,也就是说最大值为为31,如此一来,整个RECT字段的最大长度为17个字节,也就是说swf文件头最大不超过29个字节。通过Nbits字段得到后面字段的bit_value位长后,就可以确定RECT的具体长度,继而得知“帧频”和“帧数”的存储位置。在RECT字段中,从第6位开始,存储的是播放窗口的尺寸数据,根据Nbits值,将后面的部分按位分开计算,即可得到相应值。但对文件标识为“CWS”的swf文件,从“文件大小”字段后面开始(即从第8个字节后面开始),是按照Zlib标准压缩存储的,所以,在解析swf文件头时,首先需判断swf文件是否按照压缩格式导出的。如果是以压缩格式导出的,则需先对头8个字节后面的内容进行解压缩处理了,再来处理RECT字段和“帧频”和“帧数”字段。
下面给出我写的swf文件头解析类及实例压缩包的地址:
???????
swfHeaderParser

???????另外,在国外的许多网站上可以找到相关的内容,这里提供两个有代表性的地址,有兴趣的朋友可以去看看。?
本文转自:http://www.5uflash.com/flashjiaocheng/Flashyingyongkaifa/825.html

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

1비트는 몇 바이트와 같습니다. 1비트는 몇 바이트와 같습니다. Mar 09, 2023 pm 03:11 PM

1비트는 1/8바이트와 같습니다. 이진수 체계에서 0 또는 1 각각은 비트(bit)이고, 비트는 데이터 저장의 가장 작은 단위이며, 8비트(bit, 약칭 b)마다 바이트(Byte)를 구성하므로 "1바이트( 바이트) = 8비트”. 대부분의 컴퓨터 시스템에서 바이트는 8비트 길이의 데이터 단위입니다. 대부분의 컴퓨터는 바이트를 사용하여 문자, 숫자 또는 기타 문자를 나타냅니다.

swf는 어떤 파일 형식인가요? swf는 어떤 파일 형식인가요? Jul 20, 2022 pm 04:03 PM

SWF는 웹 디자인, 애니메이션 제작 및 기타 분야에서 널리 사용되는 벡터 기반 플래시 애니메이션 파일 형식입니다. FLASH 소프트웨어는 일반적으로 SWF 파일 형식을 생성하고 생성하는 데 사용되며 PDF 및 기타 유형도 해당 소프트웨어를 통해 SWF 형식으로 변환할 수 있습니다. SWF는 Flash Player로 열 수 있으며 브라우저에는 Flash Player 플러그인이 설치되어 있어야 합니다. 디자이너와 개발자는 이를 사용하여 사용자 상호 작용이 가능한 프레젠테이션, 애플리케이션 및 기타 콘텐츠를 만들 수 있습니다.

1바이트는 몇 비트와 같습니다. 1바이트는 몇 비트와 같습니다. Mar 19, 2021 pm 02:52 PM

1바이트는 8비트와 같습니다. 데이터 저장은 "바이트"(Byte) 단위로 이루어지며, 데이터 전송은 대부분 "비트"(bit) 단위로 이루어지며, 1비트는 0 또는 1(즉, 바이너리)을 나타내며, 8비트(bit)마다 ) Byte는 정보의 가장 작은 단위이므로 "1Byte=8bit"입니다.

Redis 비트 작업을 사용하는 방법 Redis 비트 작업을 사용하는 방법 May 26, 2023 pm 02:14 PM

이 글의 Redis 테스트 코드는 다음 환경을 기반으로 합니다. 운영 체제: MacOS 64비트 버전: Redis5.0.764bit 운영 모드: 독립형 모드 Redis 비트 연산 레이드 비트 연산은 비트 배열 연산이라고도 하며 비트맵 4가지 명령을 제공합니다. : SETBIT, GETBIT, BITCOUNT 및 BITTOP 이진 비트 배열을 조작하는 데 사용됩니다. 먼저 일련의 기본 작업 예제를 살펴보겠습니다. SETBIT 구문: SETBITkeyoffsetvalue는 명령 키 오프셋 0/1입니다. setbit 명령은 비트 배열에 지정된 오프셋의 이진 비트 설정 값을 쓰는 데 사용됩니다. 오프셋은 0부터 시작하여 계산됩니다. 쓰기 1 또는 0만 허용됩니다.

Linux에서 시스템이 32비트인지 64비트인지 확인하는 방법은 무엇입니까? Linux에서 시스템이 32비트인지 64비트인지 확인하는 방법은 무엇입니까? Mar 01, 2024 pm 07:34 PM

CentOS는 RHEL에서 유래한 Linux 배포판으로, 오픈 소스 코드 규정에 따라 컴파일되었습니다. 또한 RHEL과의 기능적 호환성을 유지하며 사용자가 저작권 비용을 지불하지 않고 사용하고 수정할 수 있는 무료 오픈 소스 운영 체제입니다. 그러면 CentOS는 Linux에서 32비트와 64비트를 구분합니까? 자세한 내용은 아래를 참조하십시오. CentOS는 32비트와 64비트를 구별합니다! CentOS32비트 시스템은 주로 PC용으로 출시되며, CentOS64비트 시스템은 주로 64비트 하드웨어 시스템에 설치됩니다.

1바이트는 몇 비트와 같습니다. 1바이트는 몇 비트와 같습니다. Mar 02, 2023 pm 03:44 PM

1바이트는 8비트와 같습니다. 이진수 체계에서 0 또는 1 각각은 비트(bit)이고, 비트는 데이터 저장의 가장 작은 단위이며, 8비트(bit, 약칭 b)마다 바이트(Byte)를 구성하므로 "1바이트( 바이트) = 8비트”. 대부분의 컴퓨터 시스템에서 바이트는 8비트 데이터 단위입니다. 대부분의 컴퓨터는 바이트를 사용하여 문자, 숫자 또는 기타 문자를 나타냅니다.

2025 년 상위 10 가지 가상 통화 거래 플랫폼 : 분명한 선택 2025 년 상위 10 가지 가상 통화 거래 플랫폼 : 분명한 선택 Feb 25, 2025 pm 12:12 PM

2025 년에 10 개의 가상 통화 거래 플랫폼 : 1. Binance; 사용자 경험 및 기타 요인에 가장 적합합니다.

Linux C 언어에는 비트가 있습니까? Linux C 언어에는 비트가 있습니까? Mar 28, 2023 am 10:57 AM

Linux C 언어에는 비트가 있습니다. 마이크로 컨트롤러 C 언어에서 비트는 "비트 변수"를 정의하는 데 자주 사용되는 새로운 키워드입니다. C 언어에서 비트 유형 데이터를 정의하는 방법은 다음과 같습니다. 1. sbit 또는 비트를 통해 정의합니다. (구조 내) 비트 필드를 통해 정의됩니다. 3. 결합된 비트 연산자를 통해 정의됩니다.

See all articles