根据url缓存视频封面图、图片压缩图

一、对于图片:

  • 图片质量压缩:NSData *newData = UIImageJPEGRepresentation(image, 0.01);
  • 把得到的NSData通过SDImageCache缓存到起来
  • 获取的时候,从缓存中获取
这里建议缓存NSData

如下图:是缓存的同一张图,大小是不一样的,因为NSData的大小不等于UIImage的大小,压缩过后把NSData使用imageWithData:转成UIImage后在缓存会增大压缩图大小。

+ (UIImage *)getThumbnailInImage:(NSString *)imagURL{
    
    //先从缓存中找是否有图片
    SDImageCache *cache =  [SDImageCache sharedImageCache];
    UIImage *memoryImage =  [cache imageFromMemoryCacheForKey:imagURL];
    if (memoryImage) {
        return memoryImage;
    }else{
        UIImage *diskImage =  [cache imageFromDiskCacheForKey:imagURL];
        if (diskImage) {
            return diskImage;
        }
    }
    
    if (imagURL && [imagURL containsString:@"http"]) {
        
        NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:imagURL]];
        
        if (!imageData) {
            UIImage *image = [UIImage imageNamed:@"default"];
            return image;
        }
        
        UIImage *image = [UIImage imageWithData:imageData];
        //图片压缩,制作缩略图
        NSData *newData = UIImageJPEGRepresentation(image, 0.01);
        //先缓存,在取图
        [[SDImageCache sharedImageCache] storeImageDataToDisk:newData forKey:imagURL];
        UIImage *newImg =  [cache imageFromDiskCacheForKey:imagURL];
        if (newImg) {
            return newImg;
        }else{
            return [UIImage imageWithData:newData];
        }
    }else{
        UIImage *image = [UIImage imageNamed:@"default"];
        return image;
    }
}

二、对于视频

获取视频的第一帧 返回图片

//获取视频的第一帧 返回图片
+ (UIImage *)getImage:(NSString *)videoURL{
    
    //先从缓存中找是否有图片
    SDImageCache *cache =  [SDImageCache sharedImageCache];
    UIImage *memoryImage =  [cache imageFromMemoryCacheForKey:videoURL];
    if (memoryImage) {
        return memoryImage;
    }else{
        UIImage *diskImage =  [cache imageFromDiskCacheForKey:videoURL];
        if (diskImage) {
            return diskImage;
        }
    }

    AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:videoURL] options:nil];
    NSParameterAssert(asset);
    AVAssetImageGenerator *assetImageGenerator =[[AVAssetImageGenerator alloc] initWithAsset:asset];
    assetImageGenerator.appliesPreferredTrackTransform = YES;
    assetImageGenerator.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels;
    CGImageRef thumbnailImageRef = NULL;
    CFTimeInterval thumbnailImageTime = 1;
    NSError *thumbnailImageGenerationError = nil;
    thumbnailImageRef = [assetImageGenerator copyCGImageAtTime:CMTimeMake(thumbnailImageTime, 60)actualTime:NULL error:&thumbnailImageGenerationError];

    UIImage *thumbnailImage = nil;
    if (thumbnailImageRef) {
        
        thumbnailImage = [[UIImage alloc]initWithCGImage: thumbnailImageRef];
        [[SDImageCache sharedImageCache] storeImage:thumbnailImage forKey:videoURL toDisk:YES];
        return thumbnailImage;
    }else{
        thumbnailImage = [UIImage imageNamed:@"default"];
        return thumbnailImage;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,679评论 1 32
  • 1 图片处理 1.1 编辑图片的几个方法 第一种 先用UIImage对象加载一张图片 然后转化成CGImageRe...
    Kevin_Junbaozi阅读 1,701评论 0 7
  • 下载 下载管理器 SDWebImageDownLoader作为一个单例来管理图片的下载操作。图片的下载是放在一个N...
    wind_dy阅读 1,667评论 0 1
  • 本章开始将介绍SDWebImage库中图片缓存策略类SDImageCache,首先解释一下涉及到的一些基本概念和方...
    jiangjunwy阅读 1,189评论 0 0
  • 火光在背脊炸裂 一条河流蔓延 燃烧的鱼群在河边簇拥着颤抖 像喷溅了柠檬汁的伤口 羸弱是肉体的必由之路 从啼哭到坟墓...
    深海方碑阅读 278评论 0 4

友情链接更多精彩内容