UNPKG

image-blob-reduce

Version:

High quality image resizing for blobs in browsers (`pica` wrapper with some sugar)

104 lines (98 loc) 4.76 kB
import pica, { Pica, ResizeOptions, PicaCanvas } from 'pica'; interface ErrorWithCode extends Error { code?: string; } interface JpegSegment { code: number; offset: number; length: number; } interface ExifEntry { is_big_endian: boolean; ifd: number; tag: number; format: number; count: number; entry_offset: number; data_length: number; data_offset: number; value: number[] | string | null; is_subifd_link: boolean; } type JpegSegmentIterator = (segment: JpegSegment) => unknown; type JpegSegmentFilter = (segment: JpegSegment) => unknown; type ExifEntryIterator = (entry: ExifEntry) => unknown; declare function is_jpeg(jpeg_bin: Uint8Array): boolean; declare function jpeg_segments_each(jpeg_bin: Uint8Array, on_segment: JpegSegmentIterator): void; declare function jpeg_segments_filter(jpeg_bin: Uint8Array, on_segment: JpegSegmentFilter): Uint8Array; declare function jpeg_exif_tags_each(jpeg_bin: Uint8Array, on_exif_entry: ExifEntryIterator): void; declare function jpeg_exif_tags_filter(jpeg_bin: Uint8Array, on_exif_entry: ExifEntryIterator): Uint8Array; declare function jpeg_add_comment(jpeg_bin: Uint8Array, comment: string): Uint8Array; type image_traverse_ErrorWithCode = ErrorWithCode; type image_traverse_ExifEntry = ExifEntry; type image_traverse_ExifEntryIterator = ExifEntryIterator; type image_traverse_JpegSegment = JpegSegment; type image_traverse_JpegSegmentFilter = JpegSegmentFilter; type image_traverse_JpegSegmentIterator = JpegSegmentIterator; declare const image_traverse_is_jpeg: typeof is_jpeg; declare const image_traverse_jpeg_add_comment: typeof jpeg_add_comment; declare const image_traverse_jpeg_exif_tags_each: typeof jpeg_exif_tags_each; declare const image_traverse_jpeg_exif_tags_filter: typeof jpeg_exif_tags_filter; declare const image_traverse_jpeg_segments_each: typeof jpeg_segments_each; declare const image_traverse_jpeg_segments_filter: typeof jpeg_segments_filter; declare namespace image_traverse { export { image_traverse_is_jpeg as is_jpeg, image_traverse_jpeg_add_comment as jpeg_add_comment, image_traverse_jpeg_exif_tags_each as jpeg_exif_tags_each, image_traverse_jpeg_exif_tags_filter as jpeg_exif_tags_filter, image_traverse_jpeg_segments_each as jpeg_segments_each, image_traverse_jpeg_segments_filter as jpeg_segments_filter }; export type { image_traverse_ErrorWithCode as ErrorWithCode, image_traverse_ExifEntry as ExifEntry, image_traverse_ExifEntryIterator as ExifEntryIterator, image_traverse_JpegSegment as JpegSegment, image_traverse_JpegSegmentFilter as JpegSegmentFilter, image_traverse_JpegSegmentIterator as JpegSegmentIterator }; } interface ImageBlobReduceOptions { pica?: Pica; } type ImageBlobReduceResizeOptions = ResizeOptions & { max?: number; }; interface ImageBlobReduceEnv { blob: Blob; opts: ImageBlobReduceResizeOptions & { max: number; }; image?: HTMLImageElement | null; image_url?: string | null; transform_width?: number | null; transform_height?: number | null; scale_factor?: number; out_canvas?: PicaCanvas; out_blob?: Blob; is_jpeg?: boolean; orig_blob?: Blob; orientation?: number; } type HookMethodName = '_blob_to_image' | '_calculate_size' | '_transform' | '_cleanup' | '_create_blob'; type Hook = (this: ImageBlobReduce, env: ImageBlobReduceEnv) => Promise<ImageBlobReduceEnv>; type Plugin = (reducer: ImageBlobReduce, ...params: unknown[]) => void; declare class ImageBlobReduce { pica: Pica; private initialized; private _initPromise?; constructor(options?: ImageBlobReduceOptions); use(plugin: Plugin, ...params: unknown[]): this; setup(): void; private _ensureInitialized; toBlob(blob: Blob, options?: ImageBlobReduceResizeOptions): Promise<Blob>; toCanvas(blob: Blob, options?: ImageBlobReduceResizeOptions): Promise<PicaCanvas>; before(method_name: HookMethodName, fn: Hook): this; after(method_name: HookMethodName, fn: Hook): this; _blob_to_image(env: ImageBlobReduceEnv): Promise<ImageBlobReduceEnv>; _calculate_size(env: ImageBlobReduceEnv): Promise<ImageBlobReduceEnv>; _transform(env: ImageBlobReduceEnv): Promise<ImageBlobReduceEnv>; _cleanup(env: ImageBlobReduceEnv): Promise<ImageBlobReduceEnv>; _create_blob(env: ImageBlobReduceEnv): Promise<ImageBlobReduceEnv>; _getUint8Array(blob: Blob): Promise<Uint8Array>; } declare function imageBlobReduce(options?: ImageBlobReduceOptions): ImageBlobReduce; declare const imageBlobReduceWithStatic: typeof imageBlobReduce & { ImageBlobReduce: typeof ImageBlobReduce; image_traverse: typeof image_traverse; pica: typeof pica; Pica: typeof Pica; }; export { imageBlobReduceWithStatic as default };