diff --git a/install/data/defaults.json b/install/data/defaults.json index a5921ab940..8b6f7a2b03 100644 --- a/install/data/defaults.json +++ b/install/data/defaults.json @@ -52,6 +52,7 @@ "orphanExpiryDays": 0, "resizeImageWidthThreshold": 2000, "resizeImageWidth": 760, + "resizeImageKeepOriginal": 1, "rejectImageWidth": 5000, "rejectImageHeight": 5000, "resizeImageQuality": 80, diff --git a/public/language/en-GB/admin/settings/uploads.json b/public/language/en-GB/admin/settings/uploads.json index f99528e4d0..22046915d9 100644 --- a/public/language/en-GB/admin/settings/uploads.json +++ b/public/language/en-GB/admin/settings/uploads.json @@ -12,6 +12,7 @@ "resize-image-width-threshold-help": "(in pixels, default: 2000 pixels, set to 0 to disable)", "resize-image-width": "Resize images down to specified width", "resize-image-width-help": "(in pixels, default: 760 pixels, set to 0 to disable)", + "resize-image-keep-original": "Keep original image after resize", "resize-image-quality": "Quality to use when resizing images", "resize-image-quality-help": "Use a lower quality setting to reduce the file size of resized images.", "max-file-size": "Maximum File Size (in KiB)", diff --git a/src/controllers/uploads.js b/src/controllers/uploads.js index d5105d25f1..29b5fac332 100644 --- a/src/controllers/uploads.js +++ b/src/controllers/uploads.js @@ -110,12 +110,16 @@ async function resizeImage(fileObj) { await image.resizeImage({ path: fileObj.path, - target: file.appendToFileName(fileObj.path, '-resized'), + target: meta.config.resizeImageKeepOriginal ? + file.appendToFileName(fileObj.path, '-resized') : + fileObj.path, width: meta.config.resizeImageWidth, quality: meta.config.resizeImageQuality, }); // Return the resized version to the composer/postData - fileObj.url = file.appendToFileName(fileObj.url, '-resized'); + if (meta.config.resizeImageKeepOriginal) { + fileObj.url = file.appendToFileName(fileObj.url, '-resized'); + } return fileObj; } diff --git a/src/image.js b/src/image.js index 4f07267f16..6c0ae9e68a 100644 --- a/src/image.js +++ b/src/image.js @@ -122,7 +122,6 @@ image.stripEXIF = async function (path) { }; image.checkDimensions = async function (path) { - const meta = require('./meta'); const result = await image.size(path); if (result.width > meta.config.rejectImageWidth || result.height > meta.config.rejectImageHeight) { diff --git a/src/upgrades/3.12.0/resize-image-keep-original.js b/src/upgrades/3.12.0/resize-image-keep-original.js new file mode 100644 index 0000000000..92f889fd2c --- /dev/null +++ b/src/upgrades/3.12.0/resize-image-keep-original.js @@ -0,0 +1,13 @@ +/* eslint-disable no-await-in-loop */ + +'use strict'; + +const db = require('../../database'); + +module.exports = { + name: 'Add setting for keeping original image after resize', + timestamp: Date.UTC(2024, 11, 2), + method: async function () { + await db.setObjectField('config', 'resizeImageKeepOriginal', 1); + }, +}; diff --git a/src/views/admin/settings/uploads.tpl b/src/views/admin/settings/uploads.tpl index 58da4e3ff6..aa138c8c67 100644 --- a/src/views/admin/settings/uploads.tpl +++ b/src/views/admin/settings/uploads.tpl @@ -46,6 +46,11 @@ +