Method: PSD::LayerMask#parse

Defined in:
lib/psd/layer_mask.rb

#parseObject

Parse this section, including all of the layers and folders. Once implemented, this will also trigger parsing of the channel images for each layer.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/psd/layer_mask.rb', line 30

def parse
  start_section

  mask_size = @file.read_int
  finish = @file.tell + mask_size

  return self if mask_size <= 0

  layer_info_size = Util.pad2(@file.read_int)

  if layer_info_size > 0
    layer_count = @file.read_short

    if layer_count < 0
      layer_count = layer_count.abs
      @merged_alpha = true
    end

    if layer_count * (18 + 6 * @header.channels) > layer_info_size
      raise "Unlikely number of layers parsed: #{layer_count}"
    end

    @layer_section_start = @file.tell
    layer_count.times do
      @layers << PSD::Layer.new(@file, @header).parse
    end

    layers.each do |layer|
      @file.seek 8, IO::SEEK_CUR and next if layer.folder? || layer.folder_end?
      layer.parse_channel_image(@header, @options[:parse_layer_images])
    end
  end

  # Layers are parsed in reverse order
  layers.reverse!
  group_layers

  parse_global_mask

  # Ensure we're at the end of this section
  @file.seek finish
  end_section

  return self
end