diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 8511740..6f6ea91 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@push.rocks/smartjimp', - version: '1.0.10', + version: '1.0.11', description: 'a tool fr working with images in TypeScript' } diff --git a/ts/smartjimp.classes.smartjimp.ts b/ts/smartjimp.classes.smartjimp.ts index 9d37aeb..074dd01 100644 --- a/ts/smartjimp.classes.smartjimp.ts +++ b/ts/smartjimp.classes.smartjimp.ts @@ -1,6 +1,7 @@ import * as plugins from './smartjimp.plugins.js'; -export interface IDimensions { +export interface IAssetVariation { + format?: 'avif' | 'webp' | 'png'; width?: number; height?: number; } @@ -18,28 +19,36 @@ export class SmartJimp { private getCacheKey( sourceTypeArg: 'streamfile' | 'smartfile', sourceIdArg: string, - wantedDimensionsArg?: IDimensions + assetVariationArg?: IAssetVariation ) { return `${sourceTypeArg}_${sourceIdArg}_${ - wantedDimensionsArg - ? `${wantedDimensionsArg.width || 'auto' }x${wantedDimensionsArg.height || 'auto'}` + assetVariationArg + ? `${assetVariationArg.width || 'auto' }x${assetVariationArg.height || 'auto'}` : 'original' }`; } - private async computeAssetVariation(assetBuffer: Buffer, wantedDimensions?: IDimensions) { - if (!wantedDimensions) { - return assetBuffer; + public async computeAssetVariation(assetBufferArg: Buffer, assetVariationArg?: IAssetVariation) { + if (!assetVariationArg) { + return assetBufferArg; } - let sharpImage = plugins.sharp(assetBuffer); - sharpImage = sharpImage.resize(wantedDimensions.width, wantedDimensions.height); - const result = await sharpImage.resize(wantedDimensions.width, wantedDimensions.height).avif().toBuffer(); - return result; + let sharpImage = plugins.sharp(assetBufferArg); + sharpImage = sharpImage.resize(assetVariationArg.width, assetVariationArg.height); + const resultResize = sharpImage.resize(assetVariationArg.width, assetVariationArg.height); + switch (assetVariationArg.format) { + case 'avif': + sharpImage = resultResize.avif(); + case 'webp': + sharpImage = resultResize.webp(); + case 'png': + sharpImage = resultResize.png(); + } + return sharpImage.toBuffer(); } public async getFromSmartfile( smartfileArg: plugins.smartfile.SmartFile, - wantedDimensionsArg?: IDimensions + wantedDimensionsArg?: IAssetVariation ) { const cacheKey = this.getCacheKey('smartfile', await smartfileArg.getHash(), wantedDimensionsArg); const existingCacheEntry = await this.levelCache.retrieveCacheEntryByKey(cacheKey);