php解析psd文件,PSD解析工具实现(二)

要想通过文件流的形式来解析psd文件,首先要了解psd的文件格式,

adobe的开发者文档里面有着很详细的说明:

http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/

首先,总体来说是分为5个主要部分,每个部分都占据着一定的长度,之后会逐个部分的讲述。

61e6d044ecd6032f00b1981e91239166.png

这里先讲一下文件头File Header,这部分包含了整个文件的基础信息,包括版本号,图片的透明通道数,psd内容的宽,高,深度以及色彩模式等。

968d058aa46d1b8419214318ef8b1c36.png

占用字节数1: Boolean,Byte,UnsignedByte (因为是以byte为单位存取,所要Boolean也占用一个字节)

占用字节数2: Short,UnsignedShort

占用字节数4: Int,Float,UnsignedInt

占用字节数8: Double

Unsigned 表示无符号类型,仅表示正数, 否则为有符号,可表示正负数.

这里是基于Windows平台操作的,所以psd的数据存储格式是以big endian的形式!

看到这里,相信大部分程序员都已经知道该怎么把上面的信息给弄出来了,所以直接上解析代码,这里我用的是AS3的代码:

public final class PsdHeader

{

public var signature:String; //标志 8BPS

public var version:int; //版本

public var reserve:*; //预留

public var channel:int; //通道

public var height:int; //高度

public var width:int; //宽度

public var depth:int;//深度

public var mode:int; //模式 rgb..... etc....

public function parse(ba:FileStream):void

{

var tempBa:ByteArray = new ByteArray();

signature = ba.readUTFBytes(4);

version = ba.readShort();

ba.readBytes(tempBa, 0, 6);

channel = ba.readShort();

height = ba.readInt();

width = ba.readInt();

depth = ba.readShort();

mode = ba.readShort();

}

}

完成!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值