import { Rectangle } from "./types"; export interface Implementation { nativeImage: any; } export interface CreateFromBufferOptions { width?: number; height?: number; scaleFactor?: number; } export interface ResizeOptions { width?: number; height?: number; quality?: 'good' | 'better' | 'best'; } export type Handle = string; /** * Provides imaging functions to resize or process images. You create an image * using one of the `createFrom` functions, then use the other functions to * process the image. * * Images are associated with a handle which is what will be available to the * plugin. Once you are done with an image, free it using the `free()` function. * * [View the * example](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/tests/support/plugins/imaging/src/index.ts) * */ export default class JoplinImaging { private implementation_; private images_; constructor(implementation: Implementation); private createImageHandle; private imageByHandle; private cacheImage; /** * Create an image from a buffer - however only use this for very small * images. It requires transferring the full image data from the plugin to * the app, which is extremely slow and will freeze the app. Instead, use * `createFromPath` or `createFromResource`, which will manipulate the image * data directly from the main process. */ createFromBuffer(buffer: any, options?: CreateFromBufferOptions): Promise; createFromPath(filePath: string): Promise; createFromResource(resourceId: string): Promise; getSize(handle: Handle): Promise; resize(handle: Handle, options?: ResizeOptions): Promise; crop(handle: Handle, rectange: Rectangle): Promise; /** * Warnings: requires transferring the complete image from the app to the * plugin which may freeze the app. Consider using one of the `toXxxFile()` * or `toXxxResource()` methods instead. */ toDataUrl(handle: Handle): Promise; /** * Warnings: requires transferring the complete image from the app to the * plugin which may freeze the app. Consider using one of the `toXxxFile()` * or `toXxxResource()` methods instead. */ toBase64(handle: Handle): Promise; toPngFile(handle: Handle, filePath: string): Promise; /** * Quality is between 0 and 100 */ toJpgFile(handle: Handle, filePath: string, quality?: number): Promise; private tempFilePath; /** * Creates a new Joplin resource from the image data. The image will be * first converted to a JPEG. */ toJpgResource(handle: Handle, resourceProps: any, quality?: number): Promise; /** * Creates a new Joplin resource from the image data. The image will be * first converted to a PNG. */ toPngResource(handle: Handle, resourceProps: any): Promise; /** * Image data is not automatically deleted by Joplin so make sure you call * this method on the handle once you are done. */ free(handle: Handle): Promise; }