mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-26 05:04:05 -08:00
⚡ Add "composite" option to Edit Image Node
This commit is contained in:
parent
b954ec99a3
commit
aaaa804f36
|
@ -52,6 +52,11 @@ export class EditImage implements INodeType {
|
||||||
value: 'crop',
|
value: 'crop',
|
||||||
description: 'Crops the image',
|
description: 'Crops the image',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'Composite',
|
||||||
|
value: 'composite',
|
||||||
|
description: 'Composite image on top of another one',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'Get Information',
|
name: 'Get Information',
|
||||||
value: 'information',
|
value: 'information',
|
||||||
|
@ -275,6 +280,53 @@ export class EditImage implements INodeType {
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------
|
||||||
|
// composite
|
||||||
|
// ----------------------------------
|
||||||
|
{
|
||||||
|
displayName: 'Composite Image Property',
|
||||||
|
name: 'dataPropertyNameComposite',
|
||||||
|
type: 'string',
|
||||||
|
default: '',
|
||||||
|
placeholder: 'data2',
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
operation: [
|
||||||
|
'composite',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
description: 'The name of the binary property which contains the data of the image to<br />composite on top of image which is found in Property Name.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
displayName: 'Position X',
|
||||||
|
name: 'positionX',
|
||||||
|
type: 'number',
|
||||||
|
default: 0,
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
operation: [
|
||||||
|
'composite',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
description: 'X (horizontal) position of composite image.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
displayName: 'Position Y',
|
||||||
|
name: 'positionY',
|
||||||
|
type: 'number',
|
||||||
|
default: 0,
|
||||||
|
displayOptions: {
|
||||||
|
show: {
|
||||||
|
operation: [
|
||||||
|
'composite',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
description: 'Y (vertical) position of composite image.',
|
||||||
|
},
|
||||||
|
|
||||||
// ----------------------------------
|
// ----------------------------------
|
||||||
// crop
|
// crop
|
||||||
// ----------------------------------
|
// ----------------------------------
|
||||||
|
@ -582,6 +634,8 @@ export class EditImage implements INodeType {
|
||||||
|
|
||||||
gmInstance = gmInstance.background('transparent');
|
gmInstance = gmInstance.background('transparent');
|
||||||
|
|
||||||
|
const cleanupFunctions: Array<() => void> = [];
|
||||||
|
|
||||||
if (operation === 'blur') {
|
if (operation === 'blur') {
|
||||||
const blur = this.getNodeParameter('blur') as number;
|
const blur = this.getNodeParameter('blur') as number;
|
||||||
const sigma = this.getNodeParameter('sigma') as number;
|
const sigma = this.getNodeParameter('sigma') as number;
|
||||||
|
@ -592,6 +646,22 @@ export class EditImage implements INodeType {
|
||||||
const borderColor = this.getNodeParameter('borderColor') as string;
|
const borderColor = this.getNodeParameter('borderColor') as string;
|
||||||
|
|
||||||
gmInstance = gmInstance.borderColor(borderColor).border(borderWidth, borderHeight);
|
gmInstance = gmInstance.borderColor(borderColor).border(borderWidth, borderHeight);
|
||||||
|
} else if (operation === 'composite') {
|
||||||
|
const dataPropertyNameComposite = this.getNodeParameter('dataPropertyNameComposite') as string;
|
||||||
|
const positionX = this.getNodeParameter('positionX') as number;
|
||||||
|
const positionY = this.getNodeParameter('positionY') as number;
|
||||||
|
|
||||||
|
const geometryString = (positionX >= 0 ? '+' : '') + positionX + (positionY >= 0 ? '+' : '') + positionY;
|
||||||
|
|
||||||
|
if (item.binary[dataPropertyNameComposite as string] === undefined) {
|
||||||
|
throw new Error('');
|
||||||
|
}
|
||||||
|
|
||||||
|
const { fd, path, cleanup } = await file();
|
||||||
|
cleanupFunctions.push(cleanup);
|
||||||
|
fsWriteFileAsync(fd, Buffer.from(item.binary![dataPropertyNameComposite as string].data, BINARY_ENCODING));
|
||||||
|
|
||||||
|
gmInstance = gmInstance.composite(path).geometry(geometryString);
|
||||||
} else if (operation === 'crop') {
|
} else if (operation === 'crop') {
|
||||||
const width = this.getNodeParameter('width') as number;
|
const width = this.getNodeParameter('width') as number;
|
||||||
const height = this.getNodeParameter('height') as number;
|
const height = this.getNodeParameter('height') as number;
|
||||||
|
@ -708,6 +778,8 @@ export class EditImage implements INodeType {
|
||||||
return new Promise<INodeExecutionData>((resolve, reject) => {
|
return new Promise<INodeExecutionData>((resolve, reject) => {
|
||||||
gmInstance
|
gmInstance
|
||||||
.toBuffer((error: Error | null, buffer: Buffer) => {
|
.toBuffer((error: Error | null, buffer: Buffer) => {
|
||||||
|
cleanupFunctions.forEach(async cleanup => await cleanup());
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return reject(error);
|
return reject(error);
|
||||||
}
|
}
|
||||||
|
|
|
@ -498,6 +498,7 @@
|
||||||
"rhea": "^1.0.11",
|
"rhea": "^1.0.11",
|
||||||
"rss-parser": "^3.7.0",
|
"rss-parser": "^3.7.0",
|
||||||
"ssh2-sftp-client": "^5.2.1",
|
"ssh2-sftp-client": "^5.2.1",
|
||||||
|
"tmp-promise": "^3.0.2",
|
||||||
"uuid": "^3.4.0",
|
"uuid": "^3.4.0",
|
||||||
"vm2": "^3.6.10",
|
"vm2": "^3.6.10",
|
||||||
"xlsx": "^0.16.7",
|
"xlsx": "^0.16.7",
|
||||||
|
|
Loading…
Reference in a new issue