UNPKG

@simon_he/browser-compress-image

Version:

🚀 A powerful, lightweight browser image compression library with TypeScript support. Compress JPEG, PNG, GIF images with multiple output formats (Blob, File, Base64, ArrayBuffer) and zero dependencies.

94 lines 2.88 kB
//#region src/types.d.ts type CompressResultType = 'blob' | 'file' | 'base64' | 'arrayBuffer'; type CompressResult<T extends CompressResultType> = T extends 'blob' ? Blob : T extends 'file' ? File : T extends 'base64' ? string : T extends 'arrayBuffer' ? ArrayBuffer : never; interface CompressOptions { /** * 压缩质量 (0-1) * @default 0.6 */ quality?: number; /** * 压缩模式 * - 'keepSize': 保持图片尺寸不变 (如100x100输入,输出仍为100x100),只改变文件大小 * - 'keepQuality': 保持图片质量不变,但可以改变尺寸 * @default 'keepSize' */ mode?: 'keepSize' | 'keepQuality'; /** * 目标宽度 (仅在 keepQuality 模式下生效) */ targetWidth?: number; /** * 目标高度 (仅在 keepQuality 模式下生效) */ targetHeight?: number; /** * 最大宽度 (仅在 keepQuality 模式下生效) */ maxWidth?: number; /** * 最大高度 (仅在 keepQuality 模式下生效) */ maxHeight?: number; /** * 是否保留 EXIF 信息 * @default false */ preserveExif?: boolean; /** * 是否返回所有工具的压缩结果 * @default false */ returnAllResults?: boolean; /** * 返回结果类型 * @default 'blob' */ type?: CompressResultType; } interface CompressResultItem<T extends CompressResultType> { tool: string; result: CompressResult<T>; originalSize: number; compressedSize: number; compressionRatio: number; duration: number; success: boolean; error?: string; } interface MultipleCompressResults<T extends CompressResultType> { bestResult: CompressResult<T>; bestTool: string; allResults: CompressResultItem<T>[]; totalDuration: number; } //#endregion //#region src/compress.d.ts declare function compress<T extends CompressResultType = 'blob'>(file: File, options: CompressOptions & { type?: T; returnAllResults: true; }): Promise<MultipleCompressResults<T>>; declare function compress<T extends CompressResultType = 'blob'>(file: File, options: CompressOptions & { type?: T; returnAllResults?: false; }): Promise<CompressResult<T>>; declare function compress<T extends CompressResultType = 'blob'>(file: File, quality?: number, type?: T): Promise<CompressResult<T>>; interface CompressionStats { bestTool: string; compressedFile: Blob; originalSize: number; compressedSize: number; compressionRatio: number; totalDuration: number; toolsUsed: { tool: string; size: number; duration: number; compressionRatio: number; success: boolean; error?: string; }[]; } declare function compressWithStats(file: File, qualityOrOptions?: number | CompressOptions): Promise<CompressionStats>; //#endregion export { CompressOptions, CompressResult, CompressResultItem, CompressResultType, CompressionStats, MultipleCompressResults, compress, compressWithStats };