mirror of
https://github.com/IllusionMan1212/gif-extractor-go.git
synced 2026-10-24 10:12:36 +00:00
initial commit
This commit is contained in:
+112
@@ -0,0 +1,112 @@
|
||||
package main
|
||||
|
||||
const (
|
||||
EXTENSION_BLOCK = 0x21
|
||||
|
||||
GRAPHICS_CONTROL_BLOCK = 0xF9
|
||||
GRAPHICS_CONTROL_BLOCK_SIZE = 0x04
|
||||
|
||||
PLAINTEXT_BLOCK = 0x01
|
||||
PLAINTEXT_BLOCK_SIZE = 0x0C
|
||||
|
||||
APPLICATION_BLOCK = 0xFF
|
||||
APPLICATION_BLOCK_SIZE = 0x0B
|
||||
|
||||
COMMENT_BLOCK = 0xFE
|
||||
IMAGE_DESCRIPTOR = 0x2C
|
||||
TRAILER = 0x3B
|
||||
)
|
||||
|
||||
/*
|
||||
HeaderPacked {
|
||||
0-2: GlobalColorTableSize
|
||||
3: ColorTableSortFlag | Only valid under 89a, 87a always sets it to 0
|
||||
4-6: ColorResolution
|
||||
7: GlobalColorTableFlag
|
||||
}
|
||||
*/
|
||||
|
||||
type Header struct {
|
||||
Signature [3]byte // "GIF"
|
||||
Version [3]byte // "87a" or "89a"
|
||||
|
||||
// Logical Screen Descriptor
|
||||
ScreenWidth uint16
|
||||
ScreenHeight uint16
|
||||
Packed byte
|
||||
BackgroundColor byte // unused if GlobalColorTableFlag is unset
|
||||
AspectRatio byte
|
||||
}
|
||||
|
||||
// [OPTIONAL]
|
||||
// Comes right after the logical screen descriptor
|
||||
// Size of color table is always a power of 2, with a max of 256 entries in the table
|
||||
// ColorTableEntries = 1 << ((Packed & 7) + 1)
|
||||
// ColorTableSize = 3 * (1 << ((Packed & 7) + 1))
|
||||
type RGB struct {
|
||||
Red byte
|
||||
Green byte
|
||||
Blue byte
|
||||
}
|
||||
|
||||
type Palette []RGB
|
||||
|
||||
/*
|
||||
ImageDescriptorPacked {
|
||||
0: LocalColorTableFlag | this flag is set (1) if the image contains a local color table
|
||||
1: InterlaceFlag | this flag is set (1) if the image is interlaced
|
||||
2: SortFlag | this flag is set (1) if the color table is sorted by importance (frequency of occurrence). only available on 89a
|
||||
3-4: Reserved
|
||||
5-7: LocalColorTableEntrySize
|
||||
}
|
||||
*/
|
||||
|
||||
type ImageDescriptor struct {
|
||||
Left int16 // X position of image
|
||||
Top int16 // Y position of image
|
||||
Width uint16 // width of image in pixels
|
||||
Height uint16 // height of image in pixels
|
||||
Packed byte // image and color table data information
|
||||
}
|
||||
|
||||
/*
|
||||
GraphicsControlPacked {
|
||||
0: TransparentColorFlag
|
||||
1: UserInputFlag
|
||||
2-4: DisposalMethod
|
||||
5-7: Reserved
|
||||
}
|
||||
*/
|
||||
|
||||
/********************/
|
||||
/* EXTENSION BLOCKS */
|
||||
/********************/
|
||||
|
||||
// Only available on 89a and comes after the global color table and before the 1st image
|
||||
type GraphicsControlBlock struct {
|
||||
Packed byte // method of graphics disposal to use
|
||||
DelayTime int16 // delay to wait
|
||||
TransparentColorIndex byte // transparent color index
|
||||
}
|
||||
|
||||
type PlainTextBlock struct {
|
||||
TextGridLeft int16 // X position of text grid in pixels
|
||||
TextGridTop int16 // Y position of the text grid in pixels
|
||||
TextGridWidth int16 // width of text grid in pixels
|
||||
TextGridHeight int16 // height of text grid in pixels
|
||||
CellWidth byte // width of grid cell in pixels
|
||||
CellHeight byte // height of grid cell in pixels
|
||||
TextFgColorIndex byte // text foreground color index value
|
||||
TextBgColorIndex byte // text background color index value
|
||||
PlainTextData *byte // the plaintext data
|
||||
}
|
||||
|
||||
type ApplicationExtensionBlock struct {
|
||||
Identifier [8]byte // application identifier
|
||||
AuthentCode [3]byte // application authentication code
|
||||
ApplicationData *byte // application data
|
||||
}
|
||||
|
||||
type CommentExtensionBlock struct {
|
||||
CommentData *byte // comment data
|
||||
}
|
||||
Reference in New Issue
Block a user