1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-03-11 14:09:55 +02:00

Desktop: Added more methods to the imaging plugin API

This commit is contained in:
Laurent Cozic 2023-09-17 14:08:55 +01:00
parent 3d8c96489f
commit 3b4717b674
47 changed files with 1091 additions and 26 deletions

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -22,39 +22,19 @@ joplin.plugins.register({
const result = await joplin.data.get(['notes', noteId, 'resources']);
if (result.items.length <= 0) return;
const resource = result.items[0];
const file = await joplin.data.get(['resources', resource.id, 'file']);
// ---------------------------------------------------------------
// Create an image object and resize it
// ---------------------------------------------------------------
const imageHandle = await joplin.imaging.createFromBuffer(file.body);
const resizedImageHandle = await joplin.imaging.resize(imageHandle, { width: 100 });
const imageHandle = await joplin.imaging.createFromResource(resource.id);
const resizedImageHandle = await joplin.imaging.resize(imageHandle, { width: 100 });
// ---------------------------------------------------------------
// Save the image to file
// Convert the image to a resource and add it to the note
// ---------------------------------------------------------------
const tempFilePath = (await joplin.plugins.dataDir()) + '/' + Date.now();
const base64 = await joplin.imaging.toBase64(resizedImageHandle);
const fs = await joplin.require('fs-extra');
await fs.writeFile(tempFilePath, base64, { encoding: 'base64' });
// ---------------------------------------------------------------
// Create a resource for the thumbnail and add it to the note
// ---------------------------------------------------------------
const newResource = await joplin.data.post(
["resources"],
null,
{ title: "Thumbnail" },
[
{
path: tempFilePath,
},
]
);
const newResource = await joplin.imaging.toJpgResource(resizedImageHandle, { title: "Thumbnail" });
await joplin.commands.execute('insertText', '\n![](:/' + newResource.id + ')');
// ---------------------------------------------------------------

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,3 +1,4 @@
import { Rectangle } from "./types";
export interface Implementation {
nativeImage: any;
}
@ -31,10 +32,47 @@ export default class JoplinImaging {
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<Handle>;
createFromPath(filePath: string): Promise<Handle>;
createFromResource(resourceId: string): Promise<Handle>;
getSize(handle: Handle): Promise<any>;
resize(handle: Handle, options?: ResizeOptions): Promise<string>;
crop(handle: Handle, rectange: Rectangle): Promise<string>;
/**
* 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<string>;
/**
* 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<string>;
toPngFile(handle: Handle, filePath: string): Promise<void>;
/**
* Quality is between 0 and 100
*/
toJpgFile(handle: Handle, filePath: string, quality?: number): Promise<void>;
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<import("../../database/types").ResourceEntity>;
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
toPngResource(handle: Handle, resourceProps: any): Promise<import("../../database/types").ResourceEntity>;
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================

View File

@ -1,5 +1,10 @@
/* eslint-disable multiline-comment-style */
import Resource from '../../../models/Resource';
import Setting from '../../../models/Setting';
import shim from '../../../shim';
import { Rectangle } from './types';
export interface Implementation {
nativeImage: any;
}
@ -63,21 +68,61 @@ export default class JoplinImaging {
return handle;
}
/**
* 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.
*/
public async createFromBuffer(buffer: any, options: CreateFromBufferOptions = null): Promise<Handle> {
return this.cacheImage(this.implementation_.nativeImage.createFromBuffer(buffer, options));
}
public async createFromPath(filePath: string): Promise<Handle> {
return this.cacheImage(this.implementation_.nativeImage.createFromPath(filePath));
}
public async createFromResource(resourceId: string): Promise<Handle> {
const resource = await Resource.load(resourceId);
if (!resource) throw new Error(`No such resource: ${resourceId}`);
const resourcePath = await Resource.fullPath(resource);
if (!(await shim.fsDriver().exists(resourcePath))) throw new Error(`Could not load resource path: ${resourcePath}`);
return this.createFromPath(resourcePath);
}
public async getSize(handle: Handle) {
const image = this.imageByHandle(handle);
return image.data.getSize();
}
public async resize(handle: Handle, options: ResizeOptions = null) {
const image = this.imageByHandle(handle);
const resizedImage = image.data.resize(options);
return this.cacheImage(resizedImage);
}
public async crop(handle: Handle, rectange: Rectangle) {
const image = this.imageByHandle(handle);
const croppedImage = image.data.crop(rectange);
return this.cacheImage(croppedImage);
}
/**
* 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.
*/
public async toDataUrl(handle: Handle): Promise<string> {
const image = this.imageByHandle(handle);
return image.data.toDataURL();
}
/**
* 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.
*/
public async toBase64(handle: Handle) {
const dataUrl = await this.toDataUrl(handle);
const s = dataUrl.split('base64,');
@ -85,6 +130,49 @@ export default class JoplinImaging {
return s[1];
}
public async toPngFile(handle: Handle, filePath: string) {
const image = this.imageByHandle(handle);
const data = image.data.toPNG();
await shim.fsDriver().writeFile(filePath, data, 'buffer');
}
/**
* Quality is between 0 and 100
*/
public async toJpgFile(handle: Handle, filePath: string, quality = 80) {
const image = this.imageByHandle(handle);
const data = image.data.toJPEG(quality);
await shim.fsDriver().writeFile(filePath, data, 'buffer');
}
private tempFilePath(ext: string) {
return `${Setting.value('tempDir')}/${Date.now()}_${Math.random()}.${ext}`;
}
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a JPEG.
*/
public async toJpgResource(handle: Handle, resourceProps: any, quality = 80) {
const tempFilePath = this.tempFilePath('jpg');
await this.toJpgFile(handle, tempFilePath, quality);
const newResource = await shim.createResourceFromPath(tempFilePath, resourceProps, { resizeLargeImages: 'never' });
await shim.fsDriver().remove(tempFilePath);
return newResource;
}
/**
* Creates a new Joplin resource from the image data. The image will be
* first converted to a PNG.
*/
public async toPngResource(handle: Handle, resourceProps: any) {
const tempFilePath = this.tempFilePath('png');
await this.toPngFile(handle, tempFilePath);
const newResource = await shim.createResourceFromPath(tempFilePath, resourceProps, { resizeLargeImages: 'never' });
await shim.fsDriver().remove(tempFilePath);
return newResource;
}
/**
* Image data is not automatically deleted by Joplin so make sure you call
* this method on the handle once you are done.

View File

@ -359,6 +359,13 @@ export interface DialogResult {
formData?: any;
}
export interface Rectangle {
x?: number;
y?: number;
width?: number;
height?: number;
}
// =================================================================
// Settings types
// =================================================================