【问题标题】:creating custom camera with square view on iOS在 iOS 上创建具有方形视图的自定义相机
【发布时间】:2015-03-05 15:27:41
【问题描述】:

我正在尝试在 iOS 上创建自定义相机体验,以下代码 sn-p 是我所得到的。基本上我想要通常的相机视图(即使用以下按钮:捕获、闪光、网格、前/后、取消)。但是普通相机和我的唯一区别是我想要预览表面的正方形;不是矩形。然后,您所见即所得(所见即所得),因此无需裁剪;因为用户首先会拍一张方形照片。

我也一直在查看库https://github.com/danielebogo/DBCamera,但我没有看到如何根据我的目的自定义它。有什么帮助吗?谢谢。

到目前为止我的代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    //Capture Session
    AVCaptureSession *session = [[AVCaptureSession alloc]init];
    session.sessionPreset = AVCaptureSessionPresetPhoto;

    //Add device
    AVCaptureDevice *device =
    [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    //Input
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];

    if (!input)
    {
        NSLog(@"No Input");
    }

    [session addInput:input];

    //Output
    AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
    [session addOutput:output];
    output.videoSettings =
    @{ (NSString *)kCVPixelBufferPixelFormatTypeKey : @(kCVPixelFormatType_32BGRA) };

    //Preview Layer
    AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
    UIView *myView = self.view;
    previewLayer.frame = myView.bounds;
    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    [self.view.layer addSublayer:previewLayer];

    //Start capture session
    [session startRunning];
}

这是 Xcode 上单视图项目中唯一的自定义代码

【问题讨论】:

  • 我有点困惑 - 你想从头开始创建自己的相机视图,还是想使用内置的 UIImagePickerController 并稍微自定义一下?跨度>
  • 只要我能很好地控制正在发生的事情,任何一个都可以。我也一直在研究 Picker 选项;但似乎一致认为这是一种较差的方法;这就是为什么我在过去几天一直在研究“从头开始”的方法。
  • 是的,如果您想要完全控制,我个人不会推荐UIImagePickerController。但是,它非常快速且易于实施。它确实提供了相当多的自定义选项,请查看这篇文章:link如果您想要更多选项,请查看 Apple 的 AV 类演示程序 link
  • 感谢您的链接。我会看看他们。
  • 小世界:我已经试过AVCam了。但是当我尝试将情节提要中的AVCamPreviewView 视图调整为正方形时,它本身就变成了正方形;但是,在它内部是一个较小的矩形,实际图像显示在该矩形中。你知道如何让实际图像填充正方形(即调整大小的AVCamPreviewView)吗?还是我不应该调整AVCamPreviewView 本身的大小?谢谢。

标签: ios iphone uiview camera


【解决方案1】:

您有两种选择来做自己想做的事,要么坚持并自定义 UIImagePickerController,要么使用 AVFoundation 创建自己的。

UIImagePickerController 确实提供了相当多的自定义选项,并且这个类似的线程有一些很好的信息:link。

如果您仍想自己制作,我建议您前往 Apple 文档并查看名为 AVCam:link 的演示项目。但是,它比您可能需要的更深入,所以我也可以推荐这个视频教程:link。

如果选择最后一个选项,我想提一下,要使“实际相机”适合您的previewLayer 的框架,您可以将AVCaptureVideoPreviewLayer 上的videoGravity 设置为AVLayerVideoGravityResizeAspectFill。

【讨论】:

  • 有没有办法使生成的图像与您在预览中看到的相匹配?这为我提供了一个方形预览层输出,但我从中得到的图像仍然是原始相机纵横比。
  • @sak 这是解决“方形预览层输出,但我从中得到的图像还是原来的相机纵横比”吗?
  • @iOSNepal 能否分享一下解决方案。我面临同样的问题。
【解决方案2】:

使用自定义相机可能会有点痛苦,但它会带来好处,因为您真的能够自定义您的应用体验。

最简单的方法是使用TGCameraViewController。

使用此TGCameraViewController,您可以编辑整个相机视图。此外,它还提供以下功能:-

  • 轻松访问相册(相机胶卷)
  • 闪光灯自动,关闭和打开
  • 专注
  • 前后摄像头

您也可以参考AVCamManual: Extending AVCam to Use Manual Capture 文档来创建自己的自定义相机。

【讨论】:

    猜你喜欢
    • 2011-11-30
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多