]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/image-utils.ts
Optimize image resizing
[github/Chocobozzz/PeerTube.git] / server / helpers / image-utils.ts
index 3eaa674ed98e4bf67fa0db0026045a36885a045f..da3285b13da7c3cfc902abfcfeab2f46564ab913 100644 (file)
@@ -1,13 +1,28 @@
 import 'multer'
 import * as sharp from 'sharp'
-import { remove } from 'fs-extra'
+import { move, remove } from 'fs-extra'
 
 async function processImage (
   physicalFile: { path: string },
   destination: string,
   newSize: { width: number, height: number }
 ) {
-  await sharp(physicalFile.path)
+  if (physicalFile.path === destination) {
+    throw new Error('Sharp needs an input path different that the output path.')
+  }
+
+  const sharpInstance = sharp(physicalFile.path)
+  const metadata = await sharpInstance.metadata()
+
+  // No need to resize
+  if (metadata.width === newSize.width && metadata.height === newSize.height) {
+    await move(physicalFile.path, destination, { overwrite: true })
+    return
+  }
+
+  await remove(destination)
+
+  await sharpInstance
     .resize(newSize.width, newSize.height)
     .toFile(destination)