iOS | Как идентифицировать панорамное изображение программно

Существует ли какой-либо метод или техника для определения растрового изображения (png/jpeg), которое на самом деле является панорамным изображением на 360 градусов или обычным изображением. Каков механизм, позволяющий отличить панорамное изображение от обычного изображения в Swift для iOS.


person Nico    schedule 22.02.2018    source источник
comment
Посмотрите на PHAsset и его mediaSubtypes   -  person rmaddy    schedule 22.02.2018


Ответы (3)


Панорама — это просто картинка с большим соотношением ширины и высоты (или наоборот).

Минимального размера нет, но будет максимальный (вероятно).

Соотношение стандартной фотографии составляет около 4:3, поэтому вы можете найти соотношение и определить, является ли это панорамой.

Вы можете сделать что-то вроде:

let smallest = min(image.size.width, image.size.height)
let largest = max(image.size.width, image.size.height)

let ratio = largest/smallest

let maximumRatioForNonePanorama = 4 / 3 // check with your ratio 

if ratio > maximumRatioForNonePanorama {
    // it is probably a panorama
}

Но также обратите внимание, что при съемке панорамы вы можете начать и остановить ее, вообще не перемещая камеру, поэтому это может быть просто обычная фотография.

Вот почему вы должны использовать такое соотношение. Я думаю, что для этого нет флага (пока).

person Agent Smith    schedule 22.02.2018
comment
@Cristik Если это вам не поможет, вы можете попробовать это - person Agent Smith; 22.02.2018
comment
О, извините @Nico Если это вам не поможет, вы можете попробовать это - person Agent Smith; 22.02.2018

панорамные изображения имеют разное разрешение, их соотношение будет 2:1 ,4:1 и 10:1. Чтобы идентифицировать панорамное изображение, используйте приведенный ниже фрагмент кода.

 let smallest = min(YOUR_IMAGE.size.width, YOUR_IMAGE.size.height)
 let largest = max(YOUR_IMAGE.size.width, YOUR_IMAGE.size.height)
 let ratio = largest/smallest
 if (ratio >= CGFloat(2/1)) || (ratio >= CGFloat(4/1)) || (ratio >= CGFloat(10/1)) {

    // Panorama image

 } else {

    //NON -Panorama image 

 }

Надеюсь, что это поможет вам

person Ganesh Manickam    schedule 22.02.2018

PHAsset имеет свойство с именем mediaSubtypes. Просто проверьте, содержит ли этот массив подтип панорамы.

if mediaSubtypes.contains(.photoPanorama) {
    // ...
}
person LukasHromadnik    schedule 14.06.2019