Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS中将视频裁剪成圆形?_Ios_Xcode_Camera - Fatal编程技术网

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

在iOS中将视频裁剪成圆形?,ios,xcode,camera,Ios,Xcode,Camera,我正在尝试裁剪一段用iPhone摄像头拍摄的视频,然后将其放在UIImageView的顶部。我一直在关注这个问题,如何在iOS中将视频裁剪成圆形?。我现在可以把这个视频放在另一个已经录好的视频上。现在我想让背景是图像,前景是裁剪过的视频。我现在的主要问题是在我想要裁剪的部分裁剪视频。我不能在这里发布所有代码,但这里是github repo的位置,进行修改的类称为CustomVideoCompositor.m。我很难把它编辑成圆形,我希望它是一个椭圆形,在下半部分,比宽的部分高 编辑 我想进行切割

我正在尝试裁剪一段用iPhone摄像头拍摄的视频,然后将其放在UIImageView的顶部。我一直在关注这个问题,如何在iOS中将视频裁剪成圆形?。我现在可以把这个视频放在另一个已经录好的视频上。现在我想让背景是图像,前景是裁剪过的视频。我现在的主要问题是在我想要裁剪的部分裁剪视频。我不能在这里发布所有代码,但这里是github repo的位置,进行修改的类称为CustomVideoCompositor.m。我很难把它编辑成圆形,我希望它是一个椭圆形,在下半部分,比宽的部分高

编辑

我想进行切割,以便只有圆角矩形的这一部分中的内容才会被裁剪并可用


您需要使用AVPlayer,因为它可以让您一次播放多个视频,或者让您的视频显示在另一个视图的顶部。此外,通过使用AVPlayer和AVPlayerLayer,很容易使视频显示为圆形。(这里有一个很好的教程,可以了解更多信息:)

以下是代码(针对Objective-C):

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

#import <AVFoundation/AVFoundation.h>

如果您只想要剪切视频的视觉效果,而不需要修改视频文件,您只需在视频层中添加一个遮罩即可。我指的是CALayer
mask
property


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

我正在尝试在Xcode中执行此操作,Xcode中没有
let
?啊,您使用的是Objective-C吗?我用的是斯威夫特。嘿,非常感谢,但这只是改变了视频播放器的画面,对吗?不是真的裁剪视频,如果视频被保存到相机卷上,它会是完整的吗?有没有办法保存已裁剪的视频或实际裁剪视频?你知道我的意思吗?是的,只是视频的帧被裁剪了,所以视频在镜头中保持不变。我以前从未亲自剪辑过视频并保存过它,但我相信这可以通过AVFoundation来实现。让我们来看看。
[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];