使用AVCam将视频或图像的方向更改为肖像

时间:2014-11-25 11:26:20

标签: ios output orientation avcam

我正在使用Apple的AVCam source code 创建一个自定义相机,它的工作就像一个魅力,问题是我用它捕获视频或图像,然后将其检入照片图书馆的方向改变为风景(甚至我以纵向方向捕捉它)。我搜索了很多,但是找不到办法。有什么帮助吗?

对于笔记,我的应用程序仅支持肖像和捕获应该只在纵向。

更新

AVCaptureConnection *captureConnection = ...
if ([captureConnection isVideoOrientationSupported])
{
    AVCaptureVideoOrientation orientation = AVCaptureVideoOrientationPortrait;
    [captureConnection setVideoOrientation:orientation];
}

这不起作用。

1 个答案:

答案 0 :(得分:0)

要捕捉图像,您也应该设置方向。将图像保存到磁盘时,应使用

writeImageToSavedPhotosAlbum:orientation:completionBlock:

功能和设置正确"方向"参数那里。

用法:https://developer.apple.com/library/ios/documentation/AssetsLibrary/Reference/ALAssetsLibrary_Class/index.html#//apple_ref/occ/instm/ALAssetsLibrary/writeImageToSavedPhotosAlbum:orientation:completionBlock

目标C的例子:

// Flash set to Auto for Still Capture
    [CameraViewController setFlashMode:AVCaptureFlashModeAuto
                             forDevice:[[self videoDeviceInput] device]];

    // Capture a still image.
    [[self stillImageOutput] captureStillImageAsynchronouslyFromConnection:[[self stillImageOutput] connectionWithMediaType:AVMediaTypeVideo]
                                                         completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {

        if (imageDataSampleBuffer) {
            self.imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];

            [[[ALAssetsLibrary alloc] init] writeImageToSavedPhotosAlbum:image.CGImage
                                                             orientation:(ALAssetOrientation)[image imageOrientation]
                                                         completionBlock:^(NSURL *assetURL, NSError *error) {
                                                             if(error == nil) {
                                                                 NSLog(@"PHOTO SAVED - assetURL: %@", assetURL);
                                                             } else {
                                                                 NSLog(@"ERROR : %@",error);
                                                             }
                                                         }];