From e96bd7c25e0f4617ff5eba630f8502d84012419c Mon Sep 17 00:00:00 2001 From: Stefan Forstenlechner Date: Sun, 10 Apr 2022 23:08:02 +0200 Subject: [PATCH] Fix orientation when creating thumbnails - use minimum size as well as percentage --- picture-gallery-server/src/thumbnails.ts | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/picture-gallery-server/src/thumbnails.ts b/picture-gallery-server/src/thumbnails.ts index 377d4d7..7f6b6ff 100644 --- a/picture-gallery-server/src/thumbnails.ts +++ b/picture-gallery-server/src/thumbnails.ts @@ -4,29 +4,28 @@ import path from "path"; import { publicPath, thumbnailPath, thumbnailPublicPath } from "./paths"; const percentage = 25; -const minimumPixelForThumbnail = 1000; +const minimumPixelForThumbnail = 1024; export const createThumbnailAsyncForImage = (image: string) => { sharp(`${publicPath}${image}`) .metadata() .then((info) => { - let width = Math.round((info.width * percentage) / 100); - let height = Math.round((info.height * percentage) / 100); - // no thumbnail if both sides are smaller than minimumPixelForThumbnail - if ( - info.width <= minimumPixelForThumbnail && - info.height <= minimumPixelForThumbnail - ) { - width = info.width; - height = info.height; - } + const width = Math.max( + Math.min(info.width, minimumPixelForThumbnail), + Math.round((info.width * percentage) / 100) + ); + const height = Math.max( + Math.min(info.height, minimumPixelForThumbnail), + Math.round((info.height * percentage) / 100) + ); fs.mkdir( thumbnailPublicPath + path.dirname(image), { recursive: true }, () => { sharp(`${publicPath}${image}`) - .resize(width, height) + .withMetadata() + .resize(info.width > info.height ? { width } : { height }) .toFile(`${thumbnailPublicPath}${image}`); } );