Jump To …
README lib / psd / blend_mode.coffee lib / psd / channel_image.coffee lib / psd / color.coffee lib / psd / descriptor.coffee lib / psd / file.coffee lib / psd / header.coffee lib / psd / image.coffee lib / psd / image_export.coffee lib / psd / image_exports / png.coffee lib / psd / image_format.coffee lib / psd / image_formats / layer_raw.coffee lib / psd / image_formats / layer_rle.coffee lib / psd / image_formats / raw.coffee lib / psd / image_formats / rle.coffee lib / psd / image_mode.coffee lib / psd / image_modes / cmyk.coffee lib / psd / image_modes / greyscale.coffee lib / psd / image_modes / rgb.coffee lib / psd / init.coffee lib / psd / layer / blend_modes.coffee lib / psd / layer / blending_ranges.coffee lib / psd / layer / channel_image.coffee lib / psd / layer / helpers.coffee lib / psd / layer / info.coffee lib / psd / layer / mask.coffee lib / psd / layer / name.coffee lib / psd / layer / position_channels.coffee lib / psd / layer.coffee lib / psd / layer_info / blend_clipping_elements.coffee lib / psd / layer_info / blend_interior_elements.coffee lib / psd / layer_info / fill_opacity.coffee lib / psd / layer_info / gradient_fill.coffee lib / psd / layer_info / layer_id.coffee lib / psd / layer_info / layer_name_source.coffee lib / psd / layer_info / legacy_typetool.coffee lib / psd / layer_info / locked.coffee lib / psd / layer_info / metadata.coffee lib / psd / layer_info / nested_section_divider.coffee lib / psd / layer_info / object_effects.coffee lib / psd / layer_info / section_divider.coffee lib / psd / layer_info / solid_color.coffee lib / psd / layer_info / typetool.coffee lib / psd / layer_info / unicode_name.coffee lib / psd / layer_info / vector_mask.coffee lib / psd / layer_info / vector_origination.coffee lib / psd / layer_info / vector_stroke.coffee lib / psd / layer_info / vector_stroke_content.coffee lib / psd / layer_info.coffee lib / psd / layer_mask.coffee lib / psd / lazy_execute.coffee lib / psd / mask.coffee lib / psd / node.coffee lib / psd / nodes / ancestry.coffee lib / psd / nodes / build_preview.coffee lib / psd / nodes / group.coffee lib / psd / nodes / layer.coffee lib / psd / nodes / root.coffee lib / psd / nodes / search.coffee lib / psd / path_record.coffee lib / psd / resource.coffee lib / psd / resource_section.coffee lib / psd / resources / layer_comps.coffee lib / psd / resources.coffee lib / psd / util.coffee lib / psd.coffee shims / init.coffee shims / png.coffee

# psd.coffee

lib/

¶

    RSVP = require 'rsvp'
    {Module} = require 'coffeescript-module'

    File      = require './psd/file.coffee'
    LazyExecute = require './psd/lazy_execute.coffee'

    Header    = require './psd/header.coffee'
    Resources = require './psd/resources.coffee'
    LayerMask = require './psd/layer_mask.coffee'
    Image     = require './psd/image.coffee'

¶

A general purpose parser for Photoshop files. PSDs are broken up in to 4 logical sections: the header, resources, the layer mask (including layers), and the preview image. We parse each of these sections in order.

## NodeJS Examples

Parsing asynchronously

    PSD.open('path/to/file.psd').then (psd) ->
      console.log psd.tree().export()

Parsing synchronously

    psd = PSD.fromFile('path/to/file.psd')
    psd.parse()
    console.log psd.tree().export()

    module.exports = class PSD extends Module
      @Node:
        Root: require('./psd/nodes/root.coffee')

      @extends require('./psd/init.coffee')

¶

Creates a new PSD object. Typically you will use a helper method to instantiate the PSD object. However, if you already have the PSD data stored as a Uint8Array, you can instantiate the PSD object directly.

      constructor: (data) ->
        @file = new File(data)
        @parsed = false
        @header = null

        Object.defineProperty @, 'layers',
          get: -> @layerMask.layers

        RSVP.on 'error', (reason) -> console.error(reason)

¶

Parses the PSD. You must call this method before attempting to access PSD data. It will not re-parse the PSD if it has already been parsed.

      parse: ->
        return if @parsed

        @parseHeader()
        @parseResources()
        @parseLayerMask()
        @parseImage()

        @parsed = true

¶

The next 4 methods are responsible for parsing the 4 main sections of the PSD. These are private, and you should never call them from your own code.

      parseHeader: ->
        @header = new Header(@file)
        @header.parse()

      parseResources: ->
        resources = new Resources(@file)
        @resources = new LazyExecute(resources, @file)
          .now('skip')
          .later('parse')
          .get()

      parseLayerMask: ->
        layerMask = new LayerMask(@file, @header)
        @layerMask = new LazyExecute(layerMask, @file)
          .now('skip')
          .later('parse')
          .get()

      parseImage: ->
        image = new Image(@file, @header)
        @image = new LazyExecute(image, @file)
          .later('parse')
          .ignore('width', 'height')
          .get()

¶

Returns a tree representation of the PSD document, which is the preferred way of accessing most of the PSD's data.

      tree: -> new PSD.Node.Root(@)

generated Tue May 12 2015 10:08:59 GMT-0400 (EDT)