在iOS中将视频裁剪成圆圈?

时间:2015-04-03 02:01:39

标签: ios xcode camera

我正在尝试裁剪视频,这是用iPhone相机拍摄的,然后将其放在UIImageView上。我一直在关注这个问题如何在iOS中将视频裁剪为圆圈?我现在可以拍摄视频并将其置于另一个以前录制过的视频之上。现在我希望背景为图像,前景为裁剪视频。我现在的主要问题是在我想裁剪的部分裁剪视频。我不能在这里发布所有代码,但这里是github repo的地方,修改的类叫做CustomVideoCompositor.m https://github.com/mayoff/stackoverflow-28258270-video-in-oval-on-video/tree/master/video。我无法将其编辑成我想要的圆形,我希望它是一个椭圆形,位于下半部分,而不是更宽的部分。

修改

我想进行剪切,以便只有圆角矩形的这一部分中的东西才会被裁剪和可用。

enter image description here

2 个答案:

答案 0 :(得分:2)

如果您只想要裁剪视频的视觉效果而不修改视频文件,则只需在视频图层中添加遮罩即可。我的意思是CALayer mask属性。

您可以像这样创建圆形遮罩:绘制黑色矩形,然后在其上绘制透明圆圈。

答案 1 :(得分:1)

您需要使用AVPlayer,因为这样您就可以一次播放多个视频,或者让您的视频显示在另一个视图的顶部。此外,通过使用AVPlayer和AVPlayerLayer,它很容易使视频显示为圆形。 (这是一个很好的教程,可以了解更多信息:http://jacopretorius.net/2013/02/playing-video-in-ios.html

这是代码(针对Objective-C):

在您的视图控制器.h文件中:

#import <AVFoundation/AVFoundation.h>

然后在viewDidLoad

[super viewDidLoad];

// Set up the image view first (the imageView is an IBOutlet)
self.imageView.image = [UIImage imageNamed:@"image"];
self.imageView.alpha = 0.2;

NSURL *url = [[NSBundle mainBundle] URLForResource:@"video" withExtension:@"mp4"];
AVPlayer *player = [AVPlayer playerWithURL:url];

CGFloat diameter = MIN(self.view.frame.size.width, self.view.frame.size.height) * 0.8;

AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:player];
layer.videoGravity = AVLayerVideoGravityResizeAspectFill;
layer.frame = CGRectMake((self.view.frame.size.width - diameter) / 2,
                         (self.view.frame.size.height - diameter) / 2,
                         diameter, diameter);

layer.cornerRadius = diameter / 2;
layer.masksToBounds = YES;

// Put the AVPlayerLayer on top of the image view.
[self.view.layer addSublayer:layer];

[player play];