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

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

Есть идеи?

4 Solutions collect form web for “Как сохранить фотографии, сделанные с помощью 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 .

  • Core Data, iCloud & App приостановлено с заблокированными файлами системы
  • делают ли iPhone и iPad симуляторы совместно с той же папкой Documents?
  • Relativelayout или LinearLayout в разработке ios iphone?
  • Настроить UITableView для прокрутки вверх?
  • Разбор JSON с Swift 3
  • Найти все зарегистрированные mime-типы / схемы схемы URL (фильтры намерений) на iOS (iPhone / iPad / iPod)
  • SIGSEGV Crash на устройстве iOS TestFlight
  • Показывать XIB перед UITabBarController?
  • iOS 8.3 Mobile Safari отключает отображение эмозинга
  • Должен ли я удалять NSLogs при выпуске моего приложения?
  • Как получить индекс NSArray с использованием NSPredicate?
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.