要想通过文件流的形式来解析psd文件,首先要了解psd的文件格式,
adobe的开发者文档里面有着很详细的说明:
http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/
首先,总体来说是分为5个主要部分,每个部分都占据着一定的长度,之后会逐个部分的讲述。
这里先讲一下文件头File Header,这部分包含了整个文件的基础信息,包括版本号,图片的透明通道数,psd内容的宽,高,深度以及色彩模式等。
占用字节数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();
}
}
完成!!!
来源:oschina
链接:https://my.oschina.net/u/185335/blog/646245