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

# blend_mode.coffee lib/psd/ |
--- | ---
¶ |
    {Module} = require 'coffeescript-module'
¶ The blend mode describes important data regarding a layer, such as the blending mode, the opacity, and whether it's a part of a clipping mask. |
    module.exports = class BlendMode extends Module
      @aliasProperty 'blendingMode', 'mode'
¶ All of the blend modes are stored in the PSD file with a specific key. This is the mapping of that key to its readable name. |
      BLEND_MODES = {
        norm: 'normal',
        dark: 'darken',
        lite: 'lighten',
        hue:  'hue',
        sat:  'saturation',
        colr: 'color',
        lum:  'luminosity',
        mul:  'multiply',
        scrn: 'screen',
        diss: 'dissolve',
        over: 'overlay',
        hLit: 'hard_light',
        sLit: 'soft_light',
        diff: 'difference',
        smud: 'exclusion',
        div:  'color_dodge',
        idiv: 'color_burn',
        lbrn: 'linear_burn',
        lddg: 'linear_dodge',
        vLit: 'vivid_light',
        lLit: 'linear_light',
        pLit: 'pin_light',
        hMix: 'hard_mix',
        pass: 'passthru',
        dkCl: 'darker_color',
        lgCl: 'lighter_color',
        fsub: 'subtract',
        fdiv: 'divide'
      }

      constructor: (@file) ->
¶ The 4 character key for the blending mode. |
        @blendKey = null
¶ The opacity of the layer, from [0, 255]. |
        @opacity = null
¶ Raw value for the clipping state of this layer. |
        @clipping = null
¶ Is this layer a clipping mask? |
        @clipped = null
        @flags = null
¶ The readable representation of the blend mode. |
        @mode = null
¶ Is this layer visible? |
        @visible = null
¶ Parses the blend mode data. |
      parse: ->
        @file.seek 4, true

        @blendKey = @file.readString(4).trim()
        @opacity = @file.readByte()
        @clipping = @file.readByte()
        @flags = @file.readByte()

        @mode = BLEND_MODES[@blendKey]
        @clipped = @clipping is 1

        @visible = !((@flags & (0x01 << 1)) > 0)

        @file.seek 1, true
¶ Returns the layer opacity as a percentage. |
      opacityPercentage: -> @opacity * 100 / 255

generated Tue May 12 2015 11:00:52 GMT-0400 (EDT)