美文网首页
UIImage一些扩展(获取视频第一帧、色值转图片、base64

UIImage一些扩展(获取视频第一帧、色值转图片、base64

作者: 笑啥风云 | 来源:发表于2020-01-09 10:07 被阅读0次

    下面的都是类方法

    pragma mark ---- 获取图片第一帧

    • (UIImage*) JJthumbnailImageForVideo:(NSURL *)videoURL atTime:(NSTimeInterval)time {

      AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
      NSParameterAssert(asset);
      AVAssetImageGenerator *assetImageGenerator =[[AVAssetImageGenerator alloc] initWithAsset:asset];
      assetImageGenerator.appliesPreferredTrackTransform = YES;
      assetImageGenerator.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels;

      CGImageRef thumbnailImageRef = NULL;
      CFTimeInterval thumbnailImageTime = time;
      NSError thumbnailImageGenerationError = nil;
      thumbnailImageRef = [assetImageGenerator copyCGImageAtTime:CMTimeMake(thumbnailImageTime, 60)actualTime:NULL error:&thumbnailImageGenerationError];
      if(!thumbnailImageRef)
      NSLog(@"thumbnailImageGenerationError %@",thumbnailImageGenerationError);
      UIImage
      thumbnailImage = thumbnailImageRef ? [[UIImage alloc]initWithCGImage: thumbnailImageRef] : nil;
      return thumbnailImage;
      }

    pragma mark ---- 色值转图片

    • (UIImage *)imageWithColor:(UIColor *)color withCenter:(UIImage *)centerImage size:(CGSize)size
      {
      UIView *background = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, size.width, size.height)];
      [background setBackgroundColor:color];

      UIImageView *imageView = [[UIImageView alloc] initWithImage:centerImage];
      [background addSubview:imageView];
      imageView.center = background.center;

      // Render image
      UIGraphicsBeginImageContextWithOptions(background.bounds.size, background.opaque, 0.0);
      [background.layer renderInContext:UIGraphicsGetCurrentContext()];

      UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

      UIGraphicsEndImageContext();

      return img;

    }

    pragma mark ---- base64字符串转图片

    • (UIImage *)Base64StrToUIImage:(NSString *)encodedImageStr{
      if (encodedImageStr.length==0) {
      return nil;
      }
      NSData *decodedImageData = [[NSData alloc] initWithBase64EncodedString:encodedImageStr options:NSDataBase64DecodingIgnoreUnknownCharacters];
      UIImage *decodedImage = [UIImage imageWithData:decodedImageData];
      return decodedImage;
      }

    pragma mark ---- 加载gif图

    • (UIImage *)loadGif_animatedGIFWithData:(NSData *)data {
      if (!data) {
      return nil;
      }

      CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);

      size_t count = CGImageSourceGetCount(source);

      UIImage *animatedImage;

      if (count <= 1) {
      animatedImage = [[UIImage alloc] initWithData:data];
      }
      else {
      NSMutableArray *images = [NSMutableArray array];

        NSTimeInterval duration = 0.0f;
      
        for (size_t i = 0; i < count; i++) {
            CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);
      
            duration += [self sd_frameDurationAtIndex:i source:source];
      
            [images addObject:[UIImage imageWithCGImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]];
      
            CGImageRelease(image);
        }
      
        if (!duration) {
            duration = (1.0f / 10.0f) * count;
        }
      
        animatedImage = [UIImage animatedImageWithImages:images duration:duration];
      

      }

      CFRelease(source);

      return animatedImage;
      }

    相关文章

      网友评论

          本文标题:UIImage一些扩展(获取视频第一帧、色值转图片、base64

          本文链接:https://www.haomeiwen.com/subject/tgxyactx.html