Skip to content

Commit

Permalink
feat(sharp): some new method
Browse files Browse the repository at this point in the history
  • Loading branch information
ikhsanalatsary committed May 6, 2019
1 parent a7b0e6a commit db1c9aa
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 12 deletions.
11 changes: 10 additions & 1 deletion config/default.js
Expand Up @@ -28,5 +28,14 @@ module.exports = {
metadata: {},
composite: false,
ensureAlpha: false,
modulate: false
modulate: false,
median: false,
boolean: false,
linear: false,
recomb: false,
tint: false,
removeAlpha: false,
extractChannel: false,
joinChannel: false,
bandbool: false
};
30 changes: 29 additions & 1 deletion index.d.ts
Expand Up @@ -11,7 +11,10 @@ import {
Kernel,
OverlayOptions,
FlattenOptions,
WriteableMetadata
WriteableMetadata,
Raw,
Matrix3x3,
Color
} from 'sharp';
import { UploadOptions } from '@google-cloud/storage';

Expand Down Expand Up @@ -43,6 +46,22 @@ export declare interface Format {
options?: OutputOptions | JpegOptions | PngOptions;
}

export declare interface BooleanOperand {
operand: string | Buffer;
operator: string;
options?: { raw: Raw };
}

export declare interface Linear {
a?: number | null;
b?: number
}

export declare interface JoinChannel {
images: string | Buffer | ArrayLike<string | Buffer>;
options?: SharpOptions;
}

declare type SharpOption<T = string> = false | T;

export declare interface SharpOptions {
Expand Down Expand Up @@ -72,6 +91,15 @@ export declare interface SharpOptions {
toFormat?: SharpOption<string | Format>;
ensureAlpha?: boolean;
modulate?: SharpOption<Modulate>;
median?: SharpOption<number>;
boolean?: SharpOption<BooleanOperand>;
linear?: SharpOption<Linear>;
recomb?: SharpOption<Matrix3x3>;
tint?: SharpOption<Color>;
removeAlpha?: boolean;
extractChannel?: SharpOption<number | string>;
joinChannel?: SharpOption<JoinChannel>;
bandbool?: SharpOption;
}

declare interface Sizes extends Size {
Expand Down
11 changes: 10 additions & 1 deletion lib/get-sharp-options.js
Expand Up @@ -25,5 +25,14 @@ module.exports = (options) => ({
withMetadata: options.withMetadata,
composite: options.composite,
ensureAlpha: options.ensureAlpha,
modulate: options.modulate
modulate: options.modulate,
median: options.median,
boolean: options.boolean,
linear: options.linear,
recomb: options.recomb,
tint: options.tint,
removeAlpha: options.removeAlpha,
extractChannel: options.extractChannel,
joinChannel: options.joinChannel,
bandbool: options.bandbool
});
32 changes: 25 additions & 7 deletions lib/transformer.js
Expand Up @@ -32,13 +32,31 @@ const validateValue = (value) => {
return value;
};
const resolveImageStream = (key, value, size, imageStream) => {
if (key === 'resize' && isObject(size)) {
imageStream = imageStream.resize(size.width, size.height, size.option);
} else if (key === 'toFormat') {
imageStream = imageStream.toFormat(validateFormat(value), value.options);
} else {
const valid = validateValue(value);
imageStream = imageStream[key](valid);
switch (key) {
case 'resize':
if (isObject(size)) {
imageStream = imageStream.resize(size.width, size.height, size.option);
}
break;
case 'linear':
imageStream = imageStream.linear(value.a, value.b);
break;
case 'boolean':
imageStream = imageStream.boolean(value.operand, value.operator, value.options);
break;
case 'joinChannel':
imageStream = imageStream.joinChannel(value.images, value.options);
break;
case 'toFormat':
imageStream = imageStream.toFormat(validateFormat(value), value.options);
break;

default: {
const valid = validateValue(value);
imageStream = imageStream[key](valid);
break;
}
}

return imageStream;
};
14 changes: 12 additions & 2 deletions test/implementation.test.js
Expand Up @@ -204,7 +204,9 @@ const storage8 = multerSharp({
{ suffix: 'md', width: 500, height: 500 },
{ suffix: 'sm', width: 300, height: 300 },
{ suffix: 'xs', width: 100, height: 100 }
]
],
median: 3,
linear: { a: 1.0 }
});
const upload8 = multer({ storage: storage8 });

Expand Down Expand Up @@ -236,7 +238,12 @@ const storage12 = multerSharp({
option: {
fit: 'fill'
}
}
},
recomb: [
[0.3588, 0.7044, 0.1368],
[0.2990, 0.5870, 0.1140],
[0.2392, 0.4696, 0.0912]
]
});
const upload12 = multer({ storage: storage12 });

Expand Down Expand Up @@ -268,6 +275,9 @@ const storage10 = multerSharp({
],
extract: {
left: 0, top: 2, width: 400, height: 400
},
modulate: {
brightness: 2 // increase lightness by a factor of 2
}
});
const upload10 = multer({ storage: storage10 });
Expand Down

0 comments on commit db1c9aa

Please sign in to comment.