iOS开发一个制作Live Photo的工具

本文介绍了一个iOS应用,用于将视频转换为Live Photo。文章详细阐述了Live Photo的本质,涉及的技术包括相册数据读写、Share Extension使用、视频帧提取等。作者提供了实现Live Photo制作工具的步骤,包括从相册选取素材、使用Share Extension获取其他App中的视频,并通过AppGroup实现不同进程间的数据共享。
摘要由CSDN通过智能技术生成

代码地址如下:
http://www.demodashi.com/demo/13339.html

1.livePhoto简介

livePhoto是iOS 9.0 之后系统相机提供的拍摄动态照片的功能,但是仅在6S+,iOS 9.0+设备可用。拍摄完livePhoto之后,只需要在相册按压livePhoto相片即可动态的播放。livePhoto还可以设置为动态壁纸。如果只能用相机拍摄的livePhoto设置为动态壁纸,这不能满足我们的需求了。如果可以将视频转换为livePhoto那就完美了。如果要实现这个功能就要了解live Photo的本质了。

2.livePhoto的本质

其实livePhoto的本质是一张jpg图片+一段mov视频另外再加入一些信息一起写入到相册内即可生成livePhoto,核心的写入代码是我在github找到的,但是Swift版,我将它翻译为OC版。Swift版写入livePhotoDemo

3.涉及到的技术

1)相册数据的读取与写入;
2)share Extension的使用;
3)视频提取某一帧图片;
4)不同进程间的通讯;
5)PHLivePhotoView展示livePhoto图片;

4.实现livePhoto制作工具

主界面UI如下图,噗。。请原谅我毫无美感的页面设计,勿喷。

顶部一个AVplayer实现本地视频的播放,AVplayer下面一个UISlider可以选择视频的哪一帧作为livePhoto的封面图。UISlider下面一个PHLivePhotoView按压可以预览livePhoto的效果图。

1)如何提取视频中的某一帧?
/**
 获取视频的 某一帧

 @param currentTime 某一时刻单位 s
 @param path 视频路径
 @return return 返回image
 */
- (UIImage *)getVideoImageWithTime:(Float64)currentTime videoPath:(NSURL *)path {
        AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:path options:nil];
//        float fps = [[[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] nominalFrameRate];
//        NSLog(@"视频帧率%f",fps);
        AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];
        gen.appliesPreferredTrackTransform = YES;
        gen.requestedTimeToleranceAfter = kCMTimeZero;// 精确提取某一帧,需要这样处理
        gen.requestedTimeToleranceBefore = kCMTimeZero;// 精确提取某一帧,需要这样处理

        CMTime time = CMTimeMakeWithSeconds(currentTime, 600);
        NSError *error = nil;
        CMTime actualTime;
        CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];
        UIImage *img = [[UIImage
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值