From 29851c5736e067838b3d4a00cb58f28939f13e36 Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Tue, 3 Aug 2021 22:11:58 -0700 Subject: [PATCH] =?UTF-8?q?=E2=8C=A8=EF=B8=8F=20Added=20a=20type=20for=20i?= =?UTF-8?q?mage=20stats?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/imagetransformation.service.ts | 43 ----------------------- utils/imagetransformation.utils.ts | 46 +++++++++---------------- utils/uncompression.utils.ts | 9 ++--- 3 files changed, 21 insertions(+), 77 deletions(-) diff --git a/services/imagetransformation.service.ts b/services/imagetransformation.service.ts index 830805e..e48fa35 100644 --- a/services/imagetransformation.service.ts +++ b/services/imagetransformation.service.ts @@ -8,12 +8,7 @@ import { } from "moleculer"; import { resizeImage, - calculateLevenshteinDistance, } from "../utils/imagetransformation.utils"; -import https from "https"; -import fs from "fs"; -import path from "path"; - export default class ProductsService extends Service { // @ts-ignore public constructor( @@ -58,44 +53,6 @@ export default class ProductsService extends Service { return { resizeOperationStatus: resizeResult }; }, }, - calculateLevenshteinDistance: { - rest: "POST /calculateLevenshteinDistance", - params: {}, - async handler( - ctx: Context<{ - imagePath: string; - imagePath2: string; - options: { - match_id: string, - }; - }> - ) { - const fileName = ctx.params.options.match_id + "_" + path.basename( - ctx.params.imagePath - ); - return new Promise((resolve, reject) => { - https.get(ctx.params.imagePath2, (response) => { - const fileStream = response.pipe( - fs.createWriteStream( - `./userdata/temporary/${fileName}` - ) - ); - fileStream.on("finish", async () => { - const levenshteinDistance = await calculateLevenshteinDistance( - ctx.params.imagePath, - path.resolve( - `./userdata/temporary/${fileName}` - ) - ); - resolve(levenshteinDistance); - }); - - }).end(); - }); - - - }, - }, }, methods: {}, }, diff --git a/utils/imagetransformation.utils.ts b/utils/imagetransformation.utils.ts index 68b17cb..7e9cfc9 100644 --- a/utils/imagetransformation.utils.ts +++ b/utils/imagetransformation.utils.ts @@ -4,6 +4,7 @@ const leven = require("leven"); import path from "path"; import { isNull, reject } from "lodash"; import { logger } from "./logger.utils"; +import { ISharpResizedImageStats } from "threetwo-ui-typings"; export const extractMetadataFromImage = async ( imageFilePath: string @@ -21,35 +22,20 @@ export const resizeImage = async ( outputPath: string, newWidth: number, newHeight?: number -): Promise => { - return await sharp(imageFile) - .resize(newWidth) - .toFile(`${outputPath}`, (err, info) => { - if (err) { - logger.error("Failed to resize image:"); - logger.error(err); - return err; - } +): Promise => { + return new Promise((resolve, reject) => { + sharp(imageFile) + .resize(newWidth) + .toFile(`${outputPath}`, (err, info) => { + if (err) { + logger.error("Failed to resize image:"); + logger.error(err); + reject(err); + } - logger.info("Image file resized with the following parameters:"); - logger.info(info); - return info; - }); -}; - -export const calculateLevenshteinDistance = async ( - imagePath1: string, - imagePath2: string -): Promise> => { - console.log("AGANTUK", imagePath1) - const hash1 = await imghash.hash(imagePath1); - const hash2 = await imghash.hash(imagePath2); - console.log("HASHISH", hash1) - if (!isNull(hash1) && !isNull(hash2)) { - return new Promise((resolve, reject) => { - resolve({ levenshteinDistance: leven(hash1, hash2) }); - }); - } else { - reject("Can't calculate the Levenshtein distance") - } + logger.info("Image file resized with the following parameters:"); + logger.info(info); + resolve(info); + }); + }); }; diff --git a/utils/uncompression.utils.ts b/utils/uncompression.utils.ts index 02156d1..9ccba23 100644 --- a/utils/uncompression.utils.ts +++ b/utils/uncompression.utils.ts @@ -31,7 +31,7 @@ SOFTWARE. * Initial: 2021/05/04 Rishi Ghan */ -import { createReadStream, createWriteStream, readFileSync } from "fs"; +import { createReadStream, createWriteStream, readFileSync, stat } from "fs"; const fse = require("fs-extra"); import path from "path"; import { each, isEmpty, map, flatten } from "lodash"; @@ -42,6 +42,7 @@ import { IExtractedComicBookCoverFile, IExtractionOptions, IFolderData, + ISharpResizedImageStats, } from "threetwo-ui-typings"; import { logger } from "./logger.utils"; import { validateComicBookMetadata } from "../utils/validation.utils"; @@ -95,12 +96,12 @@ export const extractCoverFromFile = async ( ); // create renditions const renditionPath = constructedPaths.targetPath + "/" + walkedFolder.name + "_200px.jpg"; - await resizeImage(targetCoverImageFilePath, path.resolve(renditionPath), 200); - + const stats:ISharpResizedImageStats = await resizeImage(targetCoverImageFilePath, path.resolve(renditionPath), 200); + resolve({ name: walkedFolder.name, path: constructedPaths.targetPath + "/" + walkedFolder.name + "_200px.jpg", //renditionPath - fileSize: 0, + fileSize: stats.size, containedIn: walkedFolder.containedIn, //originalPath: //extension: