/** * GIF Reader Implementation * * Parses existing GIF files and extracts frames, metadata, and color information. */ import { ImageData, RGBColor, DisposalMethod } from './types.js'; export interface GifFrame { /** Frame image data */ imageData: ImageData; /** Frame delay in milliseconds */ delay: number; /** Frame disposal method */ disposal: DisposalMethod; /** Frame position */ left: number; top: number; /** Transparent color index (-1 if none) */ transparentIndex: number; } export interface GifMetadata { /** Extensions found in the GIF */ extensions: string[]; /** Comments from comment extensions */ comments: string[]; /** Whether any frames use interlacing */ hasInterlacedFrames: boolean; /** Whether local color tables are used */ hasLocalColorTables: boolean; /** Transparent frames detected */ hasTransparency: boolean; /** XMP metadata if present */ xmpData?: string; /** Technical details discovered during parsing */ technicalDetails: { totalDataSize: number; compressionRatio?: number; averageFrameSize: number; }; } export interface GifInfo { /** GIF dimensions */ width: number; height: number; /** Number of frames */ frameCount: number; /** Loop count (0 = infinite) */ loops: number; /** Global color table */ globalColorTable?: Uint8Array; /** Background color index */ backgroundColorIndex: number; /** Pixel aspect ratio */ pixelAspectRatio: number; /** Color resolution */ colorResolution: number; /** Sort flag */ sortFlag: boolean; /** Total duration in milliseconds */ duration: number; /** File size in bytes */ size: number; /** GIF version (87a or 89a) */ version: string; /** Metadata and extension information */ metadata: GifMetadata; } /** * Reads and parses GIF files */ export declare class GifReader { private data; private position; private info; private frames; private metadata; constructor(data: Uint8Array); /** * Validates GIF header */ private validateHeader; /** * Reads a byte from the data */ private readByte; /** * Reads a 16-bit little-endian value */ private read16; /** * Reads multiple bytes */ private readBytes; /** * Skips data sub-blocks */ private skipDataSubBlocks; /** * Reads data sub-blocks and returns combined data */ private readDataSubBlocks; /** * Creates ImageData from index data and color table */ private createFrameImageData; /** * Converts interlaced index to actual pixel position */ private deinterlaceIndex; /** * Converts interlaced Y coordinate to actual Y coordinate */ private deinterlaceY; /** * Clears a frame area to background color */ private clearFrameArea; /** * Composites a frame onto the canvas */ private compositeFrame; /** * Parses the GIF and extracts all information */ parse(): GifInfo; /** * Gets basic information about the GIF */ getInfo(): GifInfo; /** * Extracts all frames from the GIF with proper canvas composition */ getFrames(): GifFrame[]; /** * Checks if the GIF is animated */ isAnimated(): boolean; /** * Gets the dominant colors from the global color table */ getDominantColors(count?: number): RGBColor[]; /** * Gets all colors from the global color table */ getAllColors(): RGBColor[]; } /** * Convenience function to read GIF info from buffer */ export declare function readGifInfo(data: Uint8Array): GifInfo; /** * Convenience function to check if data is a valid GIF */ export declare function isValidGif(data: Uint8Array): boolean;