]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/image-utils.ts
move from trending routes to alg param
[github/Chocobozzz/PeerTube.git] / server / helpers / image-utils.ts
index f2f6a004f7ede83514013810f956ab1b73830c7c..3ebf073058bd1f85e00abc49d5a59748ed4c81a3 100644 (file)
@@ -1,5 +1,6 @@
 import { remove, rename } from 'fs-extra'
-import { convertWebPToJPG } from './ffmpeg-utils'
+import { extname } from 'path'
+import { convertWebPToJPG, processGIF } from './ffmpeg-utils'
 import { logger } from './logger'
 
 const Jimp = require('jimp')
@@ -10,18 +11,39 @@ async function processImage (
   newSize: { width: number, height: number },
   keepOriginal = false
 ) {
+  const extension = extname(path)
+
   if (path === destination) {
-    throw new Error('Jimp needs an input path different that the output path.')
+    throw new Error('Jimp/FFmpeg needs an input path different that the output path.')
   }
 
   logger.debug('Processing image %s to %s.', path, destination)
 
+  // Use FFmpeg to process GIF
+  if (extension === '.gif') {
+    await processGIF(path, destination, newSize)
+  } else {
+    await jimpProcessor(path, destination, newSize)
+  }
+
+  if (keepOriginal !== true) await remove(path)
+}
+
+// ---------------------------------------------------------------------------
+
+export {
+  processImage
+}
+
+// ---------------------------------------------------------------------------
+
+async function jimpProcessor (path: string, destination: string, newSize: { width: number, height: number }) {
   let jimpInstance: any
 
   try {
     jimpInstance = await Jimp.read(path)
   } catch (err) {
-    logger.debug('Cannot read %s with jimp. Try to convert the image using ffmpeg first.', { err })
+    logger.debug('Cannot read %s with jimp. Try to convert the image using ffmpeg first.', path, { err })
 
     const newName = path + '.jpg'
     await convertWebPToJPG(path, newName)
@@ -36,12 +58,4 @@ async function processImage (
     .resize(newSize.width, newSize.height)
     .quality(80)
     .writeAsync(destination)
-
-  if (keepOriginal !== true) await remove(path)
-}
-
-// ---------------------------------------------------------------------------
-
-export {
-  processImage
 }