Skip to content

Commit 6176138

Browse files
committed
Normalize original width+height dimensions.
Switch reported original dimensions for browsers with automatic image orientation.
1 parent cda87fc commit 6176138

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

js/load-image-orientation.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ Exif orientation values to correctly display the letter F:
4343
})(function (loadImage) {
4444
'use strict'
4545

46+
var originalTransform = loadImage.transform
4647
var originalHasCanvasOption = loadImage.hasCanvasOption
4748
var originalHasMetaOption = loadImage.hasMetaOption
4849
var originalTransformCoordinates = loadImage.transformCoordinates
@@ -66,6 +67,33 @@ Exif orientation values to correctly display the letter F:
6667
img.src = testImageURL
6768
})()
6869

70+
loadImage.transform = function (img, options, callback, file, data) {
71+
originalTransform.call(
72+
loadImage,
73+
img,
74+
options,
75+
function (img, data) {
76+
if (data) {
77+
var exifOrientation = data.exif && data.exif.get('Orientation')
78+
if (
79+
loadImage.orientation &&
80+
exifOrientation > 4 &&
81+
exifOrientation < 9
82+
) {
83+
// Automatic image orientation switched image dimensions
84+
var originalWidth = data.originalWidth
85+
var originalHeight = data.originalHeight
86+
data.originalWidth = originalHeight
87+
data.originalHeight = originalWidth
88+
}
89+
}
90+
callback(img, data)
91+
},
92+
file,
93+
data
94+
)
95+
}
96+
6997
// Determines if the target image should be a canvas element:
7098
loadImage.hasCanvasOption = function (options) {
7199
return (

test/test.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -932,6 +932,20 @@
932932
).to.be.ok
933933
})
934934

935+
it('Provide original image width+height from before orientation', function (done) {
936+
expect(
937+
loadImage(
938+
blobJPEG,
939+
function (img, data) {
940+
expect(data.originalWidth).to.equal(3)
941+
expect(data.originalHeight).to.equal(2)
942+
done()
943+
},
944+
{ meta: true, minWidth: 20, minHeight: 30 }
945+
)
946+
).to.be.ok
947+
})
948+
935949
describe('from-image', function () {
936950
if (!loadImage.orientation) return
937951

0 commit comments

Comments
 (0)