psd
Version:
A general purpose Photoshop file parser.
84 lines (66 loc) • 2.01 kB
text/coffeescript
{Module} = require 'coffeescript-module'
# Represents the header of the PSD, which is the first thing always parsed.
# The header stores important information about the PSD such as the dimensions
# and the color depth.
module.exports = class Header extends Module
@aliasProperty 'height', 'rows'
@aliasProperty 'width', 'cols'
# All of the color modes are stored internally as a short from 0-15.
# This is a mapping of that value to a human-readable name.
MODES = [
'Bitmap'
'GrayScale'
'IndexedColor'
'RGBColor'
'CMYKColor'
'HSLColor'
'HSBColor'
'Multichannel'
'Duotone'
'LabColor'
'Gray16'
'RGB48'
'Lab48'
'CMYK64'
'DeepMultichannel'
'Duotone16'
]
# The signature of the PSD. Should be 8BPS.
sig: null
# The version of the PSD. Should be 1.
version: null
# The number of color channels in the PSD.
channels: null
# The height of the PSD. Can also be accessed with `height`.
rows: null
# The width of the PSD. Can also be accessed with `width`.
cols: null
# The bit depth of the PSD.
depth: null
# The color mode of the PSD.
mode: null
# Creates a new Header.
# @param [File] file The PSD file.
constructor: (@file) ->
# Parses the header data.
parse: ->
@sig = @file.readString(4)
if @sig != '8BPS'
throw new Error('Invalid file signature detected. Got: '+@sig+'. Expected 8BPS.')
@version = @file.readUShort()
@file.seek 6, true
@channels = @file.readUShort()
@rows = @height = @file.readUInt()
@cols = @width = @file.readUInt()
@depth = @file.readUShort()
@mode = @file.readUShort()
colorDataLen = @file.readUInt()
@file.seek colorDataLen, true
# Converts the color mode key to a readable version.
modeName: -> MODES[@mode]
# Exports all of the header data in a basic object.
export: ->
data = {}
for key in ['sig', 'version', 'channels', 'rows', 'cols', 'depth', 'mode']
data[key] = @[key]
data