iOS 使用GPUImage为本地视频添加滤镜

这里介绍使用GPUImage为本地视频添加滤镜,下面会对GPUImage使用过程进行介绍并说明一些需要注意的东西:

工程中需要的文件可以到文章最后链接下载

首先把gpuimage.a和放置GPUImage头文件的文件夹usr添加到项目中

然后需要在info.plist文件中添加键值获取照片库访问权限:
NSPhotoLibraryUsageDescription
是否允许此App访问你的媒体资料库?

然后导入 AssetsLibrary框架
这里是获取了系统照片库第一个视频文件,所以运行的时候记得随便录制一个视频文件在系统照片库

获取GPUImage头文件的引用
import GPUImage.h

下面介绍主要使用到的内容

GPUImageMovie 接收需要添加滤镜的视频
GPUImageView 预览视频效果
GPUImageOutput 视频输入输出配置,这里承载滤镜
GPUImageMovieWriter 添加滤镜及输出视频

 // 
 //  ViewController.m 
 //  VideoFilterText 
 // 
 // 


 #import "ViewController.h" 


 #import "GPUImage.h" 


 #import <AssetsLibrary/AssetsLibrary.h> 


 #define WIDTH [UIScreen mainScreen].bounds.size.width 
 #define HEIGHT [UIScreen mainScreen].bounds.size.height 


 #define WINDOW [[UIApplication sharedApplication] keyWindow] 


 @interface ViewController () 


 @property (nonatomic,strong)GPUImageMovie * gpuMovie;//接管视频数据 


 @property (nonatomic,strong)GPUImageView * gpuView;//预览视频内容 


 @property (nonatomic,strong)GPUImageOutput<GPUImageInput> * pixellateFilter;//视频滤镜 


 @property (nonatomic,strong)GPUImageMovieWriter * movieWriter;//视频处理输出 


 @property (nonatomic,strong)UIScrollView * EditView;//滤镜选择视图 


 @property (nonatomic,strong)NSArray * GPUImgArr;//存放滤镜数组 


 @property (nonatomic,copy)NSURL * filePath;//照片库第一个视频路径 
 @property (nonatomic,copy)NSString * fileSavePath;//视频合成后存储路径  

 @property (nonatomic,strong)NSMutableDictionary * dic;//存放上个滤镜filter 


 @property (nonatomic,assign)NSTimer * timer;//设置计时器,因为重复合成同一个滤镜时间会很长超时后重新创建 
 @property (nonatomic,assign)int timeNum;//记时时间 


 @property (nonatomic,strong)UIView * hudView;//加载框 


 @end 


 @implementation ViewController 


 - (void)viewDidLoad { 

   [super viewDidLoad]; 

     self.view.backgroundColor = [UIColor whiteColor]; 

    _dic = [[NSMutableDictionary alloc]initWithDictionary:@{@"filter":@""}]; 

   [self getVideoUrl];//获取系统照片库第一个视频文件 

   // Do any additional setup after loading the view, typically from a nib. 
 } 


 -(void)getVideoUrl{ 
     NSString *tipTextWhenNoPhotosAuthorization; // 提示语 
     // 获取当前应用对照片的访问授权状态 
     ALAuthorizationStatus authorizationStatus = [ALAssetsLibrary authorizationStatus]; 
     // 如果没有获取访问授权,或者访问授权状态已经被明确禁止,则显示提示语,引导用户开启授权 
     if (authorizationStatus == ALAuthorizationStatusRestricted || authorizationStatus == ALAuthorizationStatusDenied) { 
         NSDictionary *mainInfoDictionary = [[NSBundle mainBundle] infoDictionary]; 
         NSString *appName = [mainInfoDictionary objectForKey:@"CFBundleDisplayName"]; 
         tipTextWhenNoPhotosAuthorization = [NSString stringWithFormat:@"请在设备的\"设置-隐私-照片\"选项中,允许%@访问你的手机相册", appName]; 
         // 展示提示语 
     } 

    ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init]; 

    [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 
         if (group) { 

             [group setAssetsFilter:[ALAssetsFilter allVideos]]; 
             if (group.numberOfAssets > 0) { 

                [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { 

                    static int i = 1; 

                    if (i == 1) { 
                         i++; 
                         NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
                         [dateFormatter setTimeZone:[NSTimeZone localTimeZone]]; 
                         [dateFormatter
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值