IPhone XR, изображение с камеры имеет ширину и высоту, переключается в JavaScript

Поэтому я, кажется, обнаружил странное поведение при определении типа изображения (пейзаж / портрет) на изображении IPhone XR (формат heic). Похоже, что в javascript переключены ширина и высота изображения. Есть ли информация об этом поведении? Или у вас, ребята, есть предложения по поводу того, что произойдет? Код, обнаруживающий нормальное поведение на любом другом изображении.

reader.onload = function (e) {
                    const img = new Image()
                    img.src = e.target.result
                    img.onload = (f) => {
                        // nuxt,vue 
                        that.$nextTick(() => {
                            const width = img.width
                            const height = img.height
                            console.log(img.width, img.naturalWidth, img.height, img.naturalHeight)
                            if (height > width) {
                                that.imgType = 'portrait'
                            } else {
                                that.imgType = 'landscape'
                            }
                            console.log(that.imgType)
                        })
                    }
                    that.img = img
                }
                reader.readAsDataURL(this.$refs.fileUpload.files[0])

1 ответ

На самом деле ширина и высота не переключаются, вместо этого ваше портретное изображение является пейзажным изображением. Информация о том, что это ландшафтное изображение имеет портретную ориентацию, сохраняется в exif-данных файла изображения. Когда вы открываете изображение в macOS, iOS или Windows, оно проверяет exif-данные и поворачивает изображение на дисплее, так что вы никогда не заметите, что оно действительно сохраняется как альбомная.

Для считывания exif-данных в JavaScript вы можете использовать такие скрипты, как exif-js или exif-parser. Тогда вы можете вращать / вычислять вращение самостоятельно по заданному номеру ориентации:

Дополнительная информация об exif-ориентации: https://github.com/bwindels/exif-parser

Другие вопросы по тегам