При использовании avfoundation – отображает видимую часть захваченного изображения, представленного на уровне дисплея

Я использую библиотеку PBJVision для захвата изображений.

Под капотом используется AVFoundation.

Я установил камеру для использования следующих параметров

PBJVision *camera = [[PBJVision alloc] init]; self.camera = camera; self.camera.delegate = self; [self.camera setCameraMode:PBJCameraModePhoto]; [self.camera setCameraDevice:PBJCameraDeviceFront]; [self.camera setCameraOrientation:PBJCameraOrientationPortrait]; [self.camera setFocusMode:PBJFocusModeAutoFocus]; [self.camera setPresentationFrame:self.previewView.frame]; [self.camera previewLayer].frame = self.previewView.bounds; [self.camera previewLayer].videoGravity = AVLayerVideoGravityResizeAspectFill; [self.previewView.layer addSublayer:[self.camera previewLayer]]; 

потому что гравитация уровня предварительного просмотра задается как AVLayerVideoGravityResizeAspectFill захваченное изображение не идентично предварительно просмотренному изображению.

Как я могу обрезать его в соответствии с гравитацией видео?

One Solution collect form web for “При использовании avfoundation – отображает видимую часть захваченного изображения, представленного на уровне дисплея”

Основываясь на превосходной Поваренной книге Эрика Садун, добавление кода ниже в ваш контроллер просмотра позволит вам сделать
UIImage *newImage = [self.applyAspectFillImage: image InRect: self.previewView.bounds];

Максимальный размер изображения можно получить с помощью меньшего края (ширины или высоты) исходного фотоизображения для размера прямоугольника назначения.

 CGFloat scaleW = image.size.width / previewView.bounds.size.width; CGRect destRect = CGRectMake(0, 0, image.size.width, preview.bounds.size.height * scaleW); UIImage *newImage = [self.applyAspectFillImage: image InRect: destRect]; 

Код:

 CGRect CGRectCenteredInRect(CGRect rect, CGRect mainRect) { CGFloat xOffset = CGRectGetMidX(mainRect)-CGRectGetMidX(rect); CGFloat yOffset = CGRectGetMidY(mainRect)-CGRectGetMidY(rect); return CGRectOffset(rect, xOffset, yOffset); } // Calculate the destination scale for filling CGFloat CGAspectScaleFill(CGSize sourceSize, CGRect destRect) { CGSize destSize = destRect.size; CGFloat scaleW = destSize.width / sourceSize.width; CGFloat scaleH = destSize.height / sourceSize.height; return MAX(scaleW, scaleH); } CGRect CGRectAspectFillRect(CGSize sourceSize, CGRect destRect) { CGSize destSize = destRect.size; CGFloat destScale = CGAspectScaleFill(sourceSize, destRect); CGFloat newWidth = sourceSize.width * destScale; CGFloat newHeight = sourceSize.height * destScale; CGFloat dWidth = ((destSize.width - newWidth) / 2.0f); CGFloat dHeight = ((destSize.height - newHeight) / 2.0f); CGRect rect = CGRectMake (dWidth, dHeight, newWidth, newHeight); return rect; } - (UIImage *) applyAspectFillImage: (UIImage *) image InRect: (CGRect) bounds { CGRect destRect; UIGraphicsBeginImageContext(bounds.size); CGRect rect = CGRectAspectFillRect(image.size, bounds); destRect = CGRectCenteredInRect(rect, bounds); [image drawInRect: destRect]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; } 
  • Как захватить покадровые изображения с iPhone видеозаписи в режиме реального времени
  • Почему текстура OpenGL ES в оттенках серого из AVCaptureSession перемещена?
  • Метод AVCaptureSession stopRunning создает страшные зависания
  • Аудио не записывается в AVCaptureSession
  • Как я могу извлечь AVMetadataObject из UIImage?
  • Воспроизведение звука системы во время записи видео / аудио
  • Сеанс AVCapture для захвата изображения SWIFT
  • Получение моментального снимка изображения AVCaptureVideoPreviewLayer
  • iOS, объединяющий выходные данные для видеоданных и фотографий
  • Почему AVCaptureDevice nil?
  • Быстрая загрузка видео и воспроизведение без буферизации видео с URL-адреса
  • Interesting Posts

    Иногда приложение не сообщает об iBeacon, когда приложение убивает пользователя в ios

    iOS 11 Модифицированная текстовая область загрузки Safari вне курсора

    iOS: автоматическая синхронизация в фоновом режиме с основными данными

    Ошибка lldb: использование необъявленного идентификатора

    как установить высоту ячейки таблицы динамически в зависимости от длины текстовой метки?

    Быстрая инициализация объектов (метод фабрики классов, инициализация по умолчанию, удобство инициализации)

    как искать каталоги ios

    Тип содержимого набора файлов JSON для приложения / json AFNetworking

    Как «нравится» и «комментировать» на facebook через Graph API в iPhone?

    ios симулятор: имитировать салфетки и перетаскивание

    Измените MKMapType в MKMapView и сохраните пользовательский pinImage для аннотаций

    Обнаружение устройства iOS без Bonjour

    Удаление значка с иконки приложения iOS

    Приложение iOS зависает при загрузке пользовательского информационного окна для маркера на Картах Google

    Как добавить новый файл класса в группу в Xcode?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.