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.
770 771 772 |
# File 'lib/fastimage.rb', line 770 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
780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 |
# File 'lib/fastimage.rb', line 780 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
774 775 776 |
# File 'lib/fastimage.rb', line 774 def width_and_height @stream.read(11)[6..10].unpack('SS') end |