gif-info 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,84 @@
1
+ # encoding: utf-8
2
+ # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
3
+
4
+ require "abstract"
5
+
6
+ ##
7
+ # Primary GifInfo module.
8
+ #
9
+
10
+ class GifInfo
11
+
12
+ ##
13
+ # General block.
14
+ # @abstract
15
+ #
16
+
17
+ class Block
18
+
19
+ ##
20
+ # Holds IO object.
21
+ #
22
+
23
+ @io
24
+
25
+ ##
26
+ # Holds block position in stream.
27
+ #
28
+
29
+ @position
30
+
31
+ ##
32
+ # Returns header.
33
+ #
34
+
35
+ def header
36
+ nil
37
+ end
38
+
39
+ ##
40
+ # Returns body.
41
+ #
42
+
43
+ def body
44
+ nil
45
+ end
46
+
47
+ ##
48
+ # Constructor.
49
+ # @param [IO] io some IO object at appropriate offset
50
+ #
51
+
52
+ def initialize(io)
53
+ @io = io
54
+ @position = io.pos
55
+ self.skip!
56
+ end
57
+
58
+ ##
59
+ # Skips block in stream.
60
+ # @abstract
61
+ #
62
+
63
+ def skip!
64
+ not_implemented
65
+ end
66
+
67
+ ##
68
+ # Prepares to reading position.
69
+ #
70
+
71
+ def prepare!
72
+ @io.seek(@position)
73
+ end
74
+
75
+ ##
76
+ # Returns size of block in bytes.
77
+ # @abstract
78
+ #
79
+
80
+ def bytesize
81
+ not_implemented
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
3
+
4
+ require "gif-info/dynamic-block"
5
+ require "frozen-objects"
6
+
7
+ ##
8
+ # Primary GifInfo module.
9
+ #
10
+
11
+ class GifInfo
12
+
13
+ ##
14
+ # General blocks module.
15
+ #
16
+
17
+ module Blocks
18
+
19
+ ##
20
+ # Application specific information to embedded in the GIF file itself.
21
+ #
22
+
23
+ class ApplicationExtension < DynamicBlock
24
+
25
+ ##
26
+ # Byte structure.
27
+ #
28
+
29
+ STRUCTURE = Frozen << Proc::new do
30
+ skip {1}
31
+ uint8 :extension_type
32
+ uint8 :block_size
33
+ string (:application_identifier) {8}
34
+ string (:application_authentication_code) {3}
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+ # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
3
+
4
+ require "gif-info/dynamic-block"
5
+ require "frozen-objects"
6
+
7
+ ##
8
+ # Primary GifInfo module.
9
+ #
10
+
11
+ class GifInfo
12
+
13
+ ##
14
+ # General blocks module.
15
+ #
16
+
17
+ module Blocks
18
+
19
+ ##
20
+ # Contents textual comment data.
21
+ #
22
+
23
+ class CommentExtension < DynamicBlock
24
+
25
+ ##
26
+ # Byte structure.
27
+ #
28
+
29
+ STRUCTURE = Frozen << Proc::new do
30
+ skip {1}
31
+ uint8 :extension_type
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+ # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
3
+
4
+ require "gif-info/color-table"
5
+
6
+ ##
7
+ # Primary GifInfo module.
8
+ #
9
+
10
+ class GifInfo
11
+
12
+ ##
13
+ # General blocks module.
14
+ #
15
+
16
+ module Blocks
17
+
18
+ ##
19
+ # List of all the colors that can be in the image.
20
+ #
21
+
22
+ class GlobalColorTable < ColorTable
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,43 @@
1
+ # encoding: utf-8
2
+ # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
3
+
4
+ require "gif-info/fixed-block"
5
+ require "frozen-objects"
6
+
7
+ ##
8
+ # Primary GifInfo module.
9
+ #
10
+
11
+ class GifInfo
12
+
13
+ ##
14
+ # General blocks module.
15
+ #
16
+
17
+ module Blocks
18
+
19
+ ##
20
+ # Used to specify transparency settings and control animations.
21
+ #
22
+
23
+ class GraphicsControlExtension < FixedBlock
24
+
25
+ ##
26
+ # Byte structure.
27
+ #
28
+
29
+ STRUCTURE = Frozen << Proc::new do
30
+ skip {3}
31
+ byte (:packed) do
32
+ number (:reserved) {3}
33
+ number (:disposal_method) {3}
34
+ boolean :user_input
35
+ boolean :transparent_color
36
+ end
37
+ uint16 :delay_time
38
+ uint8 :transparent_color_index
39
+ skip {1}
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+ # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
3
+
4
+ require "gif-info/fixed-block"
5
+ require "frozen-objects"
6
+
7
+ ##
8
+ # Primary GifInfo module.
9
+ #
10
+
11
+ class GifInfo
12
+
13
+ ##
14
+ # General blocks module.
15
+ #
16
+
17
+ module Blocks
18
+
19
+ ##
20
+ # Signature and version.
21
+ #
22
+
23
+ class HeaderBlock < FixedBlock
24
+
25
+ ##
26
+ # Byte structure.
27
+ #
28
+
29
+ STRUCTURE = Frozen << Proc::new do
30
+ string (:signature) {3}
31
+ string (:version) {3}
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+ # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
3
+
4
+ require "gif-info/dynamic-block"
5
+ require "frozen-objects"
6
+
7
+ ##
8
+ # Primary GifInfo module.
9
+ #
10
+
11
+ class GifInfo
12
+
13
+ ##
14
+ # General blocks module.
15
+ #
16
+
17
+ module Blocks
18
+
19
+ ##
20
+ # series of output codes which tell the decoder which colors to
21
+ # spit out to the canvas.
22
+ #
23
+
24
+ class ImageData < DynamicBlock
25
+
26
+ ##
27
+ # Byte structure.
28
+ #
29
+
30
+ STRUCTURE = Frozen << Proc::new do
31
+ uint8 :lzw_minimum_code_size
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+ # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
3
+
4
+ require "gif-info/fixed-block"
5
+ require "frozen-objects"
6
+
7
+ ##
8
+ # Primary GifInfo module.
9
+ #
10
+
11
+ class GifInfo
12
+
13
+ ##
14
+ # General blocks module.
15
+ #
16
+
17
+ module Blocks
18
+
19
+ ##
20
+ # Block for describing single image in GIF.
21
+ #
22
+
23
+ class ImageDescriptor < FixedBlock
24
+
25
+ ##
26
+ # Byte structure.
27
+ #
28
+
29
+ STRUCTURE = Frozen << Proc::new do
30
+ skip {1}
31
+ uint16 :image_left
32
+ uint16 :image_top
33
+ uint16 :image_width
34
+ uint16 :image_height
35
+ byte (:packed) do
36
+ boolean :local_color_table
37
+ boolean :interlace
38
+ boolean :local_color_table_sort
39
+ number (:reserved) {2}
40
+ number (:local_color_table_size) {3}
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+ # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
3
+
4
+ require "gif-info/color-table"
5
+
6
+ ##
7
+ # Primary GifInfo module.
8
+ #
9
+
10
+ class GifInfo
11
+
12
+ ##
13
+ # General blocks module.
14
+ #
15
+
16
+ module Blocks
17
+
18
+ ##
19
+ # List of all the colors that can be in the image.
20
+ #
21
+
22
+ class LocalColorTable < ColorTable
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,43 @@
1
+ # encoding: utf-8
2
+ # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
3
+
4
+ require "gif-info/fixed-block"
5
+ require "frozen-objects"
6
+
7
+ ##
8
+ # Primary GifInfo module.
9
+ #
10
+
11
+ class GifInfo
12
+
13
+ ##
14
+ # General blocks module.
15
+ #
16
+
17
+ module Blocks
18
+
19
+ ##
20
+ # Tells the decoder how much room this image will take up.
21
+ #
22
+
23
+ class LogicalScreenDescriptor < FixedBlock
24
+
25
+ ##
26
+ # Byte structure.
27
+ #
28
+
29
+ STRUCTURE = Frozen << Proc::new do
30
+ uint16 :canvas_width
31
+ uint16 :canvas_height
32
+ byte (:packed) do
33
+ boolean :global_color_table
34
+ number (:global_color_table_resolution) {3}
35
+ boolean :global_color_table_sort
36
+ number (:global_color_table_size) {3}
37
+ end
38
+ uint8 :background_color_index
39
+ uint8 :pixel_aspect_ratio
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,77 @@
1
+ # encoding: utf-8
2
+ # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
3
+
4
+ require "gif-info/dynamic-block"
5
+ require "gif-info/body"
6
+ require "frozen-objects"
7
+
8
+ ##
9
+ # Primary GifInfo module.
10
+ #
11
+
12
+ class GifInfo
13
+
14
+ ##
15
+ # General blocks module.
16
+ #
17
+
18
+ module Blocks
19
+
20
+ ##
21
+ # Specifies text which user wish to have rendered on the image.
22
+ # Support of this feature is very rare.
23
+ #
24
+
25
+ class PlainTextExtension < DynamicBlock
26
+
27
+ ##
28
+ # Byte structure.
29
+ #
30
+
31
+ STRUCTURE = Frozen << Proc::new do
32
+ skip {1}
33
+ uint8 :extension_type
34
+ uint8 :block_size
35
+ end
36
+
37
+ ##
38
+ # Returns data body.
39
+ #
40
+ # @param [Integer] skip number of bytes to skip before data
41
+ # @return [Body] data body
42
+ #
43
+
44
+ def body
45
+ super(__additional)
46
+ end
47
+
48
+ ##
49
+ # Skips block in stream.
50
+ #
51
+
52
+ def skip!
53
+ super(__additional)
54
+ end
55
+
56
+ ##
57
+ # Returns block size.
58
+ # @return [Integer] block size in bytes
59
+ #
60
+
61
+ def bytesize
62
+ super + __additional
63
+ end
64
+
65
+
66
+ private
67
+
68
+ ##
69
+ # Returns additional length.
70
+ #
71
+
72
+ def __additional
73
+ self.header.data.block_size
74
+ end
75
+ end
76
+ end
77
+ end