diff --git a/app/back-end/helpers/avatar.js b/app/back-end/helpers/avatar.js index ae1801cac..1acc9351c 100644 --- a/app/back-end/helpers/avatar.js +++ b/app/back-end/helpers/avatar.js @@ -1,4 +1,4 @@ -const sizeOf = require('image-size'); +const sizeOf = require('./rotation-aware-sizeof.js'); class AvatarHelper { /* diff --git a/app/back-end/helpers/rotation-aware-sizeof.js b/app/back-end/helpers/rotation-aware-sizeof.js new file mode 100644 index 000000000..b00dd7024 --- /dev/null +++ b/app/back-end/helpers/rotation-aware-sizeof.js @@ -0,0 +1,30 @@ +/* + * Rotation-aware sizeOf(). + * + * Images can contain an embedded orientation field, which indicates that they + * should be rotated before display. sizeOf() from image-size provides the original + * width and height, and the EXIF orientation value. + * + * For example, a 3000x4000 portrait image shot on an iPhone and exported from Apple + * Photos will appear to have width=4000, height=3000, orientation=6. + * + * We often need the rotated dimension ([3000, 4000] for the above example image), + * most notably when initializing a Photoswipe gallery, so this module provides a + * sizeOf() that returns [width, height] after rotation, + * i.e. [3000, 4000] for the above example image. + */ + +const originalSizeOf = require('image-size'); + +function sizeOf(image) { + const info = originalSizeOf(image); + if (info.orientation == 6 || info.orientation == 8) { + return { + width: info.height, + height: info.width + }; + } + return info; +} + +module.exports = sizeOf; diff --git a/app/back-end/image.js b/app/back-end/image.js index 87e81158b..5817c39a8 100644 --- a/app/back-end/image.js +++ b/app/back-end/image.js @@ -7,7 +7,7 @@ const fs = require('fs-extra'); const os = require('os'); const path = require('path'); const Model = require('./model.js'); -const sizeOf = require('image-size'); +const sizeOf = require('./helpers/rotation-aware-sizeof.js'); const normalizePath = require('normalize-path'); const Themes = require('./themes.js'); const Utils = require('./helpers/utils.js'); diff --git a/app/back-end/modules/render-html/contexts/page-preview.js b/app/back-end/modules/render-html/contexts/page-preview.js index a56b49e54..34122350a 100644 --- a/app/back-end/modules/render-html/contexts/page-preview.js +++ b/app/back-end/modules/render-html/contexts/page-preview.js @@ -1,7 +1,7 @@ // Necessary packages const fs = require('fs'); const path = require('path'); -const sizeOf = require('image-size'); +const sizeOf = require('./../../../helpers/rotation-aware-sizeof.js'); const sqlString = require('sqlstring'); const normalizePath = require('normalize-path'); const slug = require('./../../../helpers/slug'); diff --git a/app/back-end/modules/render-html/contexts/post-preview.js b/app/back-end/modules/render-html/contexts/post-preview.js index d9d386f6e..79d5c2b62 100644 --- a/app/back-end/modules/render-html/contexts/post-preview.js +++ b/app/back-end/modules/render-html/contexts/post-preview.js @@ -1,7 +1,7 @@ // Necessary packages const fs = require('fs'); const path = require('path'); -const sizeOf = require('image-size'); +const sizeOf = require('./../../../helpers/rotation-aware-sizeof.js'); const sqlString = require('sqlstring'); const normalizePath = require('normalize-path'); const slug = require('./../../../helpers/slug'); diff --git a/app/back-end/modules/render-html/handlebars/helpers/image-dimensions.js b/app/back-end/modules/render-html/handlebars/helpers/image-dimensions.js index d1dbd38b5..70a2c1275 100644 --- a/app/back-end/modules/render-html/handlebars/helpers/image-dimensions.js +++ b/app/back-end/modules/render-html/handlebars/helpers/image-dimensions.js @@ -1,5 +1,5 @@ const Handlebars = require('handlebars'); -const sizeOf = require('image-size'); +const sizeOf = require('./../../../../helpers/rotation-aware-sizeof.js'); const path = require('path'); const normalizePath = require('normalize-path'); diff --git a/app/back-end/modules/render-html/handlebars/helpers/json-ld.js b/app/back-end/modules/render-html/handlebars/helpers/json-ld.js index 435c105d8..75ead82b8 100644 --- a/app/back-end/modules/render-html/handlebars/helpers/json-ld.js +++ b/app/back-end/modules/render-html/handlebars/helpers/json-ld.js @@ -1,6 +1,6 @@ const Handlebars = require('handlebars'); const moment = require('moment'); -const sizeOf = require('image-size'); +const sizeOf = require('./../../../../helpers/rotation-aware-sizeof.js'); const path = require('path'); const URLHelper = require('../../helpers/url'); diff --git a/app/back-end/modules/render-html/handlebars/helpers/social-meta-tags.js b/app/back-end/modules/render-html/handlebars/helpers/social-meta-tags.js index ba331b9b8..f9df9c088 100644 --- a/app/back-end/modules/render-html/handlebars/helpers/social-meta-tags.js +++ b/app/back-end/modules/render-html/handlebars/helpers/social-meta-tags.js @@ -1,5 +1,5 @@ const stripTags = require('striptags'); -const sizeOf = require('image-size'); +const sizeOf = require('../../../../helpers/rotation-aware-sizeof.js'); const path = require('path'); const normalizePath = require('normalize-path'); diff --git a/app/back-end/modules/render-html/items/featured-image.js b/app/back-end/modules/render-html/items/featured-image.js index dbcf72688..ffebde0c9 100644 --- a/app/back-end/modules/render-html/items/featured-image.js +++ b/app/back-end/modules/render-html/items/featured-image.js @@ -1,5 +1,5 @@ const path = require('path'); -const sizeOf = require('image-size'); +const sizeOf = require('./../../../helpers/rotation-aware-sizeof'); const URLHelper = require('./../helpers/url'); const ContentHelper = require('./../helpers/content'); const UtilsHelper = require('./../../../helpers/utils'); diff --git a/app/back-end/modules/render-html/renderer-context.js b/app/back-end/modules/render-html/renderer-context.js index 2f5134ccf..891dbe395 100644 --- a/app/back-end/modules/render-html/renderer-context.js +++ b/app/back-end/modules/render-html/renderer-context.js @@ -8,7 +8,7 @@ const normalizePath = require('normalize-path'); const Plugins = require('./../../plugins.js'); const RendererCache = require('./renderer-cache'); const RendererHelpers = require('./helpers/helpers.js'); -const sizeOf = require('image-size'); +const sizeOf = require('../../helpers/rotation-aware-sizeof.js'); const UtilsHelper = require('./../../helpers/utils'); /* diff --git a/app/back-end/workers/thumbnails/post-images.js b/app/back-end/workers/thumbnails/post-images.js index ead4351d5..f23f788f9 100644 --- a/app/back-end/workers/thumbnails/post-images.js +++ b/app/back-end/workers/thumbnails/post-images.js @@ -1,6 +1,6 @@ const Image = require('./../../image.js'); const normalizePath = require('normalize-path'); -const sizeOf = require('image-size'); +const sizeOf = require('./../../helpers/rotation-aware-sizeof.js'); let result = false; let appInstance = false; diff --git a/app/package.json b/app/package.json index 2237b22c9..bfd206adb 100644 --- a/app/package.json +++ b/app/package.json @@ -26,6 +26,7 @@ "homepage": "https://getpublii.com", "dependencies": { "@aws-sdk/client-s3": "3.623.0", + "@emnapi/runtime": "^1.5.0", "@gitbeaker/node": "35.8.1", "@google-cloud/storage": "6.11.0", "@octokit/rest": "22.0.0", diff --git a/app/src/components/Splashscreen.vue b/app/src/components/Splashscreen.vue index 644237068..04e1eb69f 100644 --- a/app/src/components/Splashscreen.vue +++ b/app/src/components/Splashscreen.vue @@ -5,6 +5,8 @@ +