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

header.coffee

lib/psd/
{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)
    @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

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