Как сохранить фотографии, сделанные с помощью AVFoundation в фотоальбом?

AVFoundation просто отлично подходит для тех, кто хочет замарать руки, но по-прежнему существует множество основных вещей, которые нелегко понять, как сохранить фотографии, снятые с устройства, в фотоальбом

Есть идеи?

Вот пошаговое руководство по захвату изображения с помощью AVFoundation и сохранению его в фотоальбоме.

Добавьте объект UIView в NIB (или как подвью) и создайте в своем контроллере @property :

 @property(nonatomic, retain) IBOutlet UIView *vImagePreview; 

Подключите UIView к выходу выше в IB или назначьте его напрямую, если вы используете код вместо NIB.

Затем отредактируйте свой UIViewController и дайте ему следующий метод viewDidAppear :

 -(void)viewDidAppear:(BOOL)animated { AVCaptureSession *session = [[AVCaptureSession alloc] init]; session.sessionPreset = AVCaptureSessionPresetMedium; CALayer *viewLayer = self.vImagePreview.layer; NSLog(@"viewLayer = %@", viewLayer); AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session]; captureVideoPreviewLayer.frame = self.vImagePreview.bounds; [self.vImagePreview.layer addSublayer:captureVideoPreviewLayer]; AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; NSError *error = nil; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; if (!input) { // Handle the error appropriately. NSLog(@"ERROR: trying to open camera: %@", error); } [session addInput:input]; stillImageOutput = [[AVCaptureStillImageOutput alloc] init]; NSDictionary *outputSettings = [[NSDictionary alloc] initWithObjectsAndKeys: AVVideoCodecJPEG, AVVideoCodecKey, nil]; [stillImageOutput setOutputSettings:outputSettings]; [session addOutput:stillImageOutput]; [session startRunning]; } 

Создайте новый объект @property для хранения ссылки на выходной объект:

 @property(nonatomic, retain) AVCaptureStillImageOutput *stillImageOutput; 

Затем создайте UIImageView где мы покажем захваченную фотографию. Добавьте это в свой NIB или программно.

Подключите его к другому @property или назначьте его вручную, например;

 @property(nonatomic, retain) IBOutlet UIImageView *vImage; 

Наконец, создайте UIButton , чтобы вы могли сделать снимок.

Снова добавьте его в свой NIB (или программно на свой экран) и подключите его к следующему методу:

 -(IBAction)captureNow { AVCaptureConnection *videoConnection = nil; for (AVCaptureConnection *connection in stillImageOutput.connections) { for (AVCaptureInputPort *port in [connection inputPorts]) { if ([[port mediaType] isEqual:AVMediaTypeVideo] ) { videoConnection = connection; break; } } if (videoConnection) { break; } } NSLog(@"about to request a capture from: %@", stillImageOutput); [stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error) { CFDictionaryRef exifAttachments = CMGetAttachment( imageSampleBuffer, kCGImagePropertyExifDictionary, NULL); if (exifAttachments) { // Do something with the attachments. NSLog(@"attachements: %@", exifAttachments); } else { NSLog(@"no attachments"); } NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer]; UIImage *image = [[UIImage alloc] initWithData:imageData]; self.vImage.image = image; UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); }]; } 

Возможно, вам придется импортировать #import <ImageIO/CGImageProperties.h> .

Источник . Также проверьте это .

Согласно вашему вопросу, похоже, что у вас уже есть изображение с камеры в NSData или UIImage. Если это так, вы можете добавить это изображение в альбом разными способами. Сама AVFoundation не имеет классов, которые несут в себе изображения. Так, например, вы можете использовать структуру ALAssetsLibrary для сохранения изображения в фотоальбоме. Или вы можете использовать только структуру UIKit с помощью метода UIImageWriteToSavedPhotosAlbum . Оба хороши в использовании.

Если у вас еще нет снимка, вы можете посмотреть на метод captureStillImageAsynchronouslyFromConnection структуры AVFoundation. Во всяком случае, вот идеи. Вы можете легко найти примеры в Интернете. Удачи 🙂

Существует много возможностей для настройки камеры таким образом, что вы либо не выполняете, либо не показываете.

Лучшее место для поиска: AVCamCaptureManager.m в проекте AVCam; особенно setupSession и captureStillImage (который записывает фотографию в библиотеку).

Этот метод работает для меня

 -(void) saveImageDataToLibrary:(UIImage *) image { NSData *imageData = UIImageJPEGRepresentation(image, 1.0); [appDelegate.library writeImageDataToSavedPhotosAlbum:imageData metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) { if (error) { NSLog(@"%@",error.description); } else { NSLog(@"Photo saved successful"); } }]; } 

где appDelegate.library – ALAssetLibrary экземпляр ALAssetLibrary .

  • NSTextField становитсяFirstResponder не работает в awakeFromNib
  • UIGraphicsGetImageFromCurrentImageContext на настольном какао?
  • нечувствительность к регистру в NSArray содержит объект:
  • Тема 1: EXC_BREAKPOINT (код = EXC_i386_BPT, subcode = 0x0) ошибка
  • Невозможно добавить ALAssets в NSOperationQueue из блока перечисления
  • Использование рамок ImageCaptureCore на iOS
  • Использование C ++ в приложениях iOS и Mac OS X
  • Получение телефонных номеров из Facebook синхронизированы / контакты адресной книги «Унифицированная информация»
  • Выполнение вызовов метода динамического класса в Objective-C с более чем двумя параметрами
  • как использовать nsdateformatter в Венесуэле
  • Должен ли я использовать индивидуальный UINavigationController для каждой панели вкладок
  • Interesting Posts

    Данные Sweep Retreive Firebase

    Параметр «custom_events» или «custom_events_file» необходим для активности «CUSTOM_APP_EVENTS»

    Индекс массива вне диапазона в cellForRowAtIndexPath

    Пользовательский фон на UITabBarItem не установлен на втором кране

    Как создать библиотеку классов на основе MonoGame для использования с UWP, iOS и Android

    Лучший способ сохранения теста UITextField: textFieldShouldReturn или textFieldDidEndEditing

    iOS Проблема с анимацией в UISearchBar

    iOS 11.0 – Периодически сканируйте SSID поблизости

    Как мы можем отредактировать изображение, подобное instagram, в функции редактирования

    Внедрить собственный класс в дерево наследования подкласса в Objective-C

    Вид UIImage не имеет целочисленной высоты с автозапуском, нарисованная линия размывается

    Веб-сайт favicon не отображается на iPhone 6 (домашний экран)

    Макрос препроцессора для Apple Watch?

    @доступно с доступными версиями iOS – отсутствующие свойства

    Проблема с Async для iOS при возврате имен пользователей Firebase

    Давайте будем гением компьютера.