diff --git a/DocService/sources/DocsCoServer.js b/DocService/sources/DocsCoServer.js index 64b89469..74b55cf8 100644 --- a/DocService/sources/DocsCoServer.js +++ b/DocService/sources/DocsCoServer.js @@ -84,8 +84,6 @@ const jwt = require('jsonwebtoken'); const ms = require('ms'); const deepEqual = require('deep-equal'); const bytes = require('bytes'); -const exifParser = require('exif-parser') -const Jimp = require('Jimp'); const storage = require('./../../Common/sources/storage-base'); const constants = require('./../../Common/sources/constants'); const utils = require('./../../Common/sources/utils'); @@ -4150,29 +4148,6 @@ exports.licenseInfo = function(req, res) { } }); }; -async function fixImageExifRotation(ctx, buffer) { - //todo move to DocService dir common - try { - let parser = exifParser.create(buffer); - let exif = parser.parse(); - if (exif.tags?.Orientation > 1) { - ctx.logger.debug('fixImageExifRotation remove exif and rotate:%j', exif); - let image = await Jimp.read(buffer); - //remove exif - image.bitmap.exifBuffer = undefined; - //set jpeg and png quality - //https://www.imagemagick.org/script/command-line-options.php#quality - image.quality(90); - image.deflateLevel(7); - buffer = await image.getBufferAsync(Jimp.AUTO); - } - } catch (e) { - ctx.logger.debug('fixImageExifRotation error:%s', e.stack); - } - return buffer; -} -exports.fixImageExifRotation = fixImageExifRotation; - function validateInputParams(ctx, authRes, command) { const commandsWithoutKey = ['version', 'license', 'getForgottenList']; const isValidWithoutKey = commandsWithoutKey.includes(command.c); diff --git a/DocService/sources/canvasservice.js b/DocService/sources/canvasservice.js index 3e296947..8d3e64b1 100644 --- a/DocService/sources/canvasservice.js +++ b/DocService/sources/canvasservice.js @@ -39,6 +39,7 @@ const ms = require('ms'); const retry = require('retry'); const MultiRange = require('multi-integer-range').MultiRange; var sqlBase = require('./baseConnector'); +const utilsDocService = require('./utilsDocService'); var docsCoServer = require('./DocsCoServer'); var taskResult = require('./taskresult'); var wopiClient = require('./wopiClient'); @@ -728,7 +729,7 @@ function* commandImgurls(ctx, conn, cmd, outputData) { let getRes = yield utils.downloadUrlPromise(ctx, urlSource, tenImageDownloadTimeout, tenImageSize, authorizations[i], filterPrivate); data = getRes.body; - data = yield docsCoServer.fixImageExifRotation(ctx, data); + data = yield utilsDocService.fixImageExifRotation(ctx, data); urlParsed = urlModule.parse(urlSource); } catch (e) { diff --git a/DocService/sources/fileuploaderservice.js b/DocService/sources/fileuploaderservice.js index 04eafba6..c843ae0d 100644 --- a/DocService/sources/fileuploaderservice.js +++ b/DocService/sources/fileuploaderservice.js @@ -36,6 +36,7 @@ var multiparty = require('multiparty'); var co = require('co'); var jwt = require('jsonwebtoken'); var taskResult = require('./taskresult'); +const utilsDocService = require('./utilsDocService'); var docsCoServer = require('./DocsCoServer'); var utils = require('./../../Common/sources/utils'); var constants = require('./../../Common/sources/constants'); @@ -256,7 +257,7 @@ exports.uploadImageFile = function(req, res) { var strPathRel = 'media/' + strImageName + '.' + formatStr; var strPath = docId + '/' + strPathRel; - buffer = yield docsCoServer.fixImageExifRotation(ctx, buffer); + buffer = yield utilsDocService.fixImageExifRotation(ctx, buffer); yield storageBase.putObject(ctx, strPath, buffer, buffer.length); output[strPathRel] = yield storageBase.getSignedUrl(ctx, utils.getBaseUrlByRequest(ctx, req), strPath, diff --git a/DocService/sources/utilsDocService.js b/DocService/sources/utilsDocService.js new file mode 100644 index 00000000..c5511ef8 --- /dev/null +++ b/DocService/sources/utilsDocService.js @@ -0,0 +1,62 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2023 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +'use strict'; + +const exifParser = require("exif-parser"); +const Jimp = require("jimp"); + +async function fixImageExifRotation(ctx, buffer) { + //todo move to DocService dir common + try { + let parser = exifParser.create(buffer); + let exif = parser.parse(); + if (exif.tags?.Orientation > 1) { + ctx.logger.debug('fixImageExifRotation remove exif and rotate:%j', exif); + let image = await Jimp.read(buffer); + //remove exif + image.bitmap.exifBuffer = undefined; + //set jpeg and png quality + //https://www.imagemagick.org/script/command-line-options.php#quality + image.quality(90); + image.deflateLevel(7); + buffer = await image.getBufferAsync(Jimp.AUTO); + } + } catch (e) { + ctx.logger.debug('fixImageExifRotation error:%s', e.stack); + } + return buffer; +} + +module.exports = { + fixImageExifRotation +}; \ No newline at end of file