Class: FastImage::Gif
- Inherits:
-
Object
- Object
- FastImage::Gif
- Defined in:
- lib/fastimage.rb
Overview
:nodoc:
Instance Method Summary collapse
-
#animated? ⇒ Boolean
Checks if a delay between frames exists and if it does, then the GIFs is animated.
-
#initialize(stream) ⇒ Gif
constructor
A new instance of Gif.
- #width_and_height ⇒ Object
Constructor Details
#initialize(stream) ⇒ Gif
Returns a new instance of Gif.
733 734 735 |
# File 'lib/fastimage.rb', line 733 def initialize(stream) @stream = stream end |
Instance Method Details
#animated? ⇒ Boolean
Checks if a delay between frames exists and if it does, then the GIFs is animated
743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 |
# File 'lib/fastimage.rb', line 743 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 |
#width_and_height ⇒ Object
737 738 739 |
# File 'lib/fastimage.rb', line 737 def width_and_height @stream.read(11)[6..10].unpack('SS') end |