it-swarm.com.de

iOS fotografieren programmgesteuert

Ich weiß, dass dies möglich ist, ich habe dies in einigen Apps gesehen (iGotYa ist meiner Meinung nach die berühmteste). Ich weiß, wie ich alles einrichten kann, um Fotos zu machen, zu speichern und alles ? der Benutzer muss nur auf eine Schaltfläche klicken (im regulären Ansichts-Controller), und es wird automatisch ein Foto mit der Frontkamera aufgenommen und gespeichert (oder nicht, es wird nur als UIImage angezeigt)

Vielen Dank!

27
La bla bla

Dies ist sehr einfach, verwenden Sie einfach das AVFoundation Referenzhandbuch:

https://developer.Apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/04_MediaCapture.html

Wenn Sie nicht möchten, dass der Benutzer die Vorschau-Eingabe sieht, können Sie einfach den gesetzten Vorschau-Layer-Teil des Codes überspringen.

Bearbeiten: Um genauer zu sein.

1) Sie legen Ihre Capture-Konfiguration mit der AVFoundation fest.

  • Stellen Sie den Kameraeingang auf frontal ein, schalten Sie den Blitz usw. aus.

2) Sie überspringen den Teil, in dem die Videovorschauebene eingestellt ist.

3) Sie rufen die Methode captureStillImageAsynchronouslyFromConnection: completionHandler: immer dann auf, wenn Sie das Bild aufnehmen möchten.

Hinweis: Wenn Sie möchten, dass der Blitz nicht gehört wird, verstoßen Sie möglicherweise in einigen Ländern (z. B. Japan) gegen die Benutzerrechte. Eine Problemumgehung, die ich kenne, ist das Aufnehmen eines Frames eines Videos (löst keinen Flash aus).

22
Pochi

Sie können dies auch ohne AVFoundation tun und es ist meiner Meinung nach eine einfachere Möglichkeit, es nur mit dem UIImagePickerController ..__ zu implementieren. Es gibt 3 Bedingungen:

  1. Natürlich muss das Gerät eine Kamera haben
  2. Sie müssen die Kamerasteuerungen ausblenden
  3. Dann verwenden Sie einfach die takePicture-Methode von UIImagePickerController

Nachfolgend finden Sie ein einfaches Beispiel, das Sie normalerweise nach einem Tastendruck auslösen

- (IBAction)takePhoto:(id)sender 
{
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    picker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
    picker.showsCameraControls = NO;
    [self presentViewController:picker animated:YES
                     completion:^ {
                         [picker takePicture];
                     }];
}
15
GrandSteph

VLBCameraView ist eine Bibliothek, die AVFoundation zum Aufnehmen von Fotos verwendet. 

In der Ansicht wird eine Vorschau angezeigt, in der Sie die Methode VLBCameraView # takePicture programmgesteuert aufrufen können, um ein Foto aufzunehmen.

Kommt mit CocoaPods.

2
samwize

In .h-Datei

@interface ABCViewController : UIViewController

@property (strong, nonatomic) IBOutlet UIImageView *imageView;

- (IBAction)takePhoto:  (UIButton *)sender;
- (IBAction)selectPhoto:(UIButton *)sender;

@end

In .m-Datei

@interface ABCViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>

- (IBAction)takePhoto:(UIButton *)sender {


if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

        UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"Device has no camera"
                                                        delegate:nil
                                                        cancelButtonTitle:@"OK"
                                                        otherButtonTitles: nil];

        [myAlertView show];

    } else {

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;

    [self presentViewController:picker animated:YES completion:NULL];

}

}

- (IBAction)selectPhoto:(UIButton *)sender {

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    [self presentViewController:picker animated:YES completion:NULL];


}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
    self.imageView.image = chosenImage;

    [picker dismissViewControllerAnimated:YES completion:NULL];

}


- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

    [picker dismissViewControllerAnimated:YES completion:NULL];

}
1
Nischal Hada

Hier ist der Code für Objective -C Custom Camera. Sie können Features hinzufügen, Knöpfe nach Ihrem Wunsch.

#import "CustomCameraVC.h"

@interface CustomCameraVC ()  {
    BOOL frontCamera;
}
@property (strong,nonatomic) AVCaptureSession *captureSession;
@property (strong,nonatomic) AVCaptureStillImageOutput *stillImageOutput;
@property (strong,nonatomic) AVCaptureVideoPreviewLayer *videoPreviewLayer;
@property (weak, nonatomic) IBOutlet UIView *viewCamera;


@end

@implementation CustomCameraVC

- (void)viewDidLoad {
    [super viewDidLoad];        
}

-(void)viewWillAppear:(BOOL)animated  {
    [super viewWillAppear:YES];
    frontCamera = NO;
    [self showCameraWithFrontCamera:frontCamera];

}

-(void)showCameraWithFrontCamera:(BOOL)flag {
    self.captureSession = [[AVCaptureSession alloc]init];
    self.captureSession.sessionPreset = AVCaptureSessionPresetPhoto;
    AVCaptureDevice *captureDevice;
    if(flag)  {
      captureDevice= [self frontCamera];
    }
    else {
      captureDevice= [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    }
    NSError *error = nil;
    AVCaptureDeviceInput *input =   [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error];

    [self.captureSession addInput:input];
    self.stillImageOutput = [AVCaptureStillImageOutput new];
    self.stillImageOutput.outputSettings = @{AVVideoCodecKey:AVVideoCodecJPEG};
    [self.captureSession addOutput:_stillImageOutput];
    self.videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession];

    self.videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    self.videoPreviewLayer.connection.videoOrientation = AVCaptureVideoOrientationPortrait;
    [self.viewCamera.layer addSublayer:self.videoPreviewLayer];
    [self.captureSession startRunning];
    self.videoPreviewLayer.frame = self.viewCamera.bounds;
}


- (AVCaptureDevice *)frontCamera {
    NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
    for (AVCaptureDevice *device in devices) {
        if ([device position] == AVCaptureDevicePositionFront) {
            return device;
        }
    }
    return nil;
}


- (IBAction)btnCaptureImagePressed:(id)sender {

     AVCaptureConnection * videoConnection =  [_stillImageOutput connectionWithMediaType:AVMediaTypeVideo];

    [_stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef  _Nullable sampleBuffer, NSError * _Nullable error) {
       NSData *imageData =  [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:sampleBuffer];
        UIImage *image = [[UIImage alloc]initWithData: imageData];
        UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
    }];

}

@end
0
varender singh