使用框架 YImage
方案一 YYImageEncoder *gifEncoder = [[YYImageEncoder alloc] initWithType:YYImageTypeWebP]; gifEncoder.loopCount=0; gifEncoder.quality=0.8; [gifEncoder addImage:img duration:0.1]; [gifEncoder encodeToFile:filePath];
方案二
- (void)saveToWebpByVideoPath:(NSURL*)videoUrl webpFilePath:(NSString*)webpFilePath{
YYImageEncoder *gifEncoder = [[YYImageEncoder alloc] initWithType:YYImageTypeWebP]; gifEncoder.loopCount=0; gifEncoder.quality=0.8; AVURLAsset*asset = [[AVURLAssetalloc]initWithURL:videoUrloptions:nil]; int64_t scale = asset.duration.timescale; AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; generator.appliesPreferredTrackTransform = YES; //下面两个值设为0表示精确取帧,否则系统会有优化取出来的帧时间间隔不对等 generator.requestedTimeToleranceAfter = kCMTimeZero; generator.requestedTimeToleranceBefore = kCMTimeZero; for(inti =0; i <=4; i++) { CGFloatstarttime = i*0.1+0.5; CMTimetime =CMTimeMakeWithSeconds(starttime, (int)scale); NSError*error =nil; CMTimeactualTime; CGImageRefimage = [generatorcopyCGImageAtTime:timeactualTime:&actualTimeerror:&error]; UIImage* img = [UIImageimageWithCGImage:image]; img = [selfresizeToMaxHeight:480img:img]; [gifEncoderaddImage:imgduration:0.1]; CGImageRelease(image); } for(inti=3; i>=0; i--) { CGFloatstarttime = i*0.1+0.5; CMTimetime =CMTimeMakeWithSeconds(starttime, (int)scale); NSError*error =nil; CMTimeactualTime; CGImageRefimage = [generatorcopyCGImageAtTime:timeactualTime:&actualTimeerror:&error]; UIImage* img = [UIImageimageWithCGImage:image]; img = [selfresizeToMaxHeight:480img:img]; [gifEncoderaddImage:imgduration:0.1]; CGImageRelease(image); } [gifEncoderencodeToFile:webpFilePath]; NSLog(@"生成webp成功!"); } - (UIImage*)resizeToMaxHeight:(CGFloat)height img:(UIImage*)img{ if(img.size.width if(img.size.height>height) { CGSizenewSize =CGSizeMake(height*1.0*img.size.width/img.size.height, height); img = [imgyy_imageByResizeToSize:newSize contentMode:UIViewContentModeScaleToFill]; } } else{ if(img.size.width>height) { CGSizenewSize =CGSizeMake(height,img.size.height*height*1.0/img.size.width); img = [imgyy_imageByResizeToSize:newSize contentMode:UIViewContentModeScaleToFill]; } } returnimg; }