"use strict"; exports.id = 5910; exports.ids = [5910]; exports.modules = { /***/ 5910: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { // @ts-check const sharp = __webpack_require__(7441); const serverError = __webpack_require__(2163); const grabPaths = __webpack_require__(6715); /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** * * @param {object} params * @param {string} params.imageSourceBase64 * @param {string} params.imageName * @param {any} params.user * @param {string} [params.mimeType] * @param {number} [params.thumbnailSize] * @param {string} [params.folder] * @param {boolean} [params.isPrivate] * @returns {Promise<{ urlPath: string, urlThumbnailPath: string, urlRelativePath: string, urlThumbnailRelativePath: string } | undefined | null>} */ module.exports = async function fsWriteImageToDiskFromBase64({ imageSourceBase64 , imageName , user , mimeType , thumbnailSize , folder , isPrivate , }) { try { const buffer = Buffer.from(imageSourceBase64, "base64"); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// const MAX_SIZE = 1800; const MAX_SIZE_THUMBNAIL = thumbnailSize ? parseInt(thumbnailSize.toString()) : 400; // const sharpImage = sharp(imagePath); const sharpImageRaw = sharp(buffer); const sharpImageThumbnailRaw = sharp(buffer); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Construct root paths */ const grabedPaths = grabPaths({ isPrivate: isPrivate, user: user, folder: folder }); if (!grabedPaths) { return null; } const { fileRootPath , urlRootPath , relativePath } = grabedPaths; const imageRootPath = fileRootPath; //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Main Image * * @description Main Image */ let imageMetadataRaw = await sharpImageRaw.metadata(); let { width , height , format } = imageMetadataRaw; /** @type {keyof import("sharp").FormatEnum} */ // @ts-ignore const finalFormat = mimeType ? mimeType : format; if (width && height && width > MAX_SIZE) { let resizeRatio = MAX_SIZE / width; sharpImageRaw.resize(MAX_SIZE, Math.round(height * resizeRatio), { fit: "cover" }); } sharpImageRaw.toFormat(finalFormat, { quality: 80 }); //////////////////////////////////////// let newImageMetadataRaw = await sharpImageRaw.metadata(); //////////////////////////////////////// let imageFullName = `${imageName}.${finalFormat}`; let imagePath = imageRootPath + imageFullName; const urlPath = urlRootPath + imageFullName; const urlRelativePath = relativePath + imageFullName; await sharpImageRaw.toFile(imagePath); /** * Thumbnail * * @description Thumbnail */ if (width && height && width > MAX_SIZE_THUMBNAIL) { let resizeRatio1 = MAX_SIZE_THUMBNAIL / width; sharpImageThumbnailRaw.resize(MAX_SIZE_THUMBNAIL, Math.round(height * resizeRatio1), { fit: "cover" }); } else if (width && height) { const LOWER_THUMBNAIL_SIZE = 150; let resizeRatio2 = LOWER_THUMBNAIL_SIZE / width; sharpImageThumbnailRaw.resize(LOWER_THUMBNAIL_SIZE, Math.round(height * resizeRatio2), { fit: "cover" }); } sharpImageThumbnailRaw.toFormat(finalFormat, { quality: 80 }); //////////////////////////////////////// let imageThumbnailFullName = `${imageName}_thumbnail.${finalFormat}`; let imageThumbnailPath = imageRootPath + imageThumbnailFullName; const urlThumbnailPath = urlRootPath + imageThumbnailFullName; const urlThumbnailRelativePath = relativePath + imageThumbnailFullName; await sharpImageThumbnailRaw.toFile(imageThumbnailPath); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// return { urlPath, urlThumbnailPath, urlRelativePath, urlThumbnailRelativePath }; // console.log("===================================="); // console.log("Complete!!!"); // console.log("===================================="); } catch (/** @type {any} */ error) { console.log("Write Image to Disk error =>", error.message); serverError({ component: "functions/backend/fsWriteImageToDiskFromBase64", message: error.message }); return null; } }; /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /***/ }) }; ;