UNPKG

psd

Version:

A general purpose Photoshop file parser.

65 lines (55 loc) 1.78 kB
{Module} = require 'coffeescript-module' # Represents a single layer and all of the data associated with # that layer. Typically you will access this data from a Node # object, which simplifies access for you. module.exports = class Layer extends Module # Mixins for all of the various data each layer contains. @includes require('./layer/position_channels.coffee') @includes require('./layer/blend_modes.coffee') @includes require('./layer/mask.coffee') @includes require('./layer/blending_ranges.coffee') @includes require('./layer/name.coffee') @includes require('./layer/info.coffee') @includes require('./layer/helpers.coffee') @includes require('./layer/channel_image.coffee') constructor: (@file, @header) -> @mask = {} @blendingRanges = {} @adjustments = {} @channelsInfo = [] @blendMode = {} @groupLayer = null @infoKeys = [] # The layer's name can come from one of two places, depending on # what version of Photoshop was used to create the PSD. Object.defineProperty @, 'name', get: -> if @adjustments['name']? @adjustments['name'].data else @legacyName # Every layer starts with the same set of data, and ends with a dynamic # number of layer info blocks. parse: -> @parsePositionAndChannels() @parseBlendModes() extraLen = @file.readInt() @layerEnd = @file.tell() + extraLen @parseMaskData() @parseBlendingRanges() @parseLegacyLayerName() @parseLayerInfo() @file.seek @layerEnd return @ export: -> name: @name top: @top right: @right bottom: @bottom left: @left width: @width height: @height opacity: @opacity visible: @visible clipped: @clipped mask: @mask.export()