Class: FastImageParsing::Gif

Inherits:
ImageBase show all
Defined in:
lib/fastimage/fastimage_parsing/gif.rb

Overview

:nodoc:

Instance Method Summary collapse

Methods inherited from ImageBase

#initialize

Constructor Details

This class inherits a constructor from FastImageParsing::ImageBase

Instance Method Details

#animated?Boolean

Checks for multiple frames

Returns:

  • (Boolean)


8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/fastimage/fastimage_parsing/gif.rb', line 8

def animated?
  frames = 0
  
  # "GIF" + version (3) + width (2) + height (2)
  @stream.skip(10)
  
  # fields (1) + bg color (1) + pixel ratio (1)
  fields = @stream.read(3).unpack("CCC")[0]
  if fields & 0x80 != 0 # Global Color Table
    # 2 * (depth + 1) colors, each occupying 3 bytes (RGB)
    @stream.skip(3 * 2 ** ((fields & 0x7) + 1))
  end
  
  loop do
    block_type = @stream.read(1).unpack("C")[0]
  
    if block_type == 0x21 # Graphic Control Extension
      # extension type (1) + size (1)
      size = @stream.read(2).unpack("CC")[1]
      @stream.skip(size)
      skip_sub_blocks
    elsif block_type == 0x2C # Image Descriptor
      frames += 1
      return true if frames > 1
  
      # left position (2) + top position (2) + width (2) + height (2) + fields (1)
      fields = @stream.read(9).unpack("SSSSC")[4]
      if fields & 0x80 != 0 # Local Color Table
        # 2 * (depth + 1) colors, each occupying 3 bytes (RGB)
        @stream.skip(3 * 2 ** ((fields & 0x7) + 1))
      end
  
      @stream.skip(1) # LZW min code size (1)
      skip_sub_blocks
    else
      break # unrecognized block
    end
  end
  
  false
end

#dimensionsObject



3
4
5
# File 'lib/fastimage/fastimage_parsing/gif.rb', line 3

def dimensions
  @stream.read(11)[6..10].unpack('SS')
end