美文网首页iOS Developer程序员
ALAssetsLibrary 取某时间段内的图片

ALAssetsLibrary 取某时间段内的图片

作者: Allenyao | 来源:发表于2017-06-07 17:37 被阅读77次

    最近项目在做一个需求,从相册取出某时间段内的图片,然后各种转换其他格式。
    ALAsset转 Data
    ALAsset转 base64字符串
    ALAsset转 本地图片的地址

    首先是获取对应时间段内的图片

    需要传两个参数 一个是最早的时间NSDate格式,另一个最大的时间也是NSDate

    - (void)goToLoadImage:(NSDate *)minDate maxDate:(NSDate *)maxDate andArrBlock:(void(^)(NSMutableArray *array))arrblock{
        ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    //     使用参数取出所有存储的文件照片
        NSMutableArray *array = [[NSMutableArray alloc] init];
        [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
            
            if (group != nil) {
                [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
                    if (result != nil) {
                        if ([self changeDate:[result valueForProperty:ALAssetPropertyDate] otherMinDate:minDate maxDate:maxDate])
                        {
                            
                                [array addObject:[self AlassetImagetoLocaiteString:result]];
                        }
                    }
                    
                }];
                arrblock(array);
            }
            
        } failureBlock:^(NSError *error) {
            arrblock(array);
    
    //        读取照片失败
            
        }];
    
    }
    

    这里面用到一个方法 时间比较的方法,比价最小时间 图片时间和最大时间。
    参数类型都是NSDate

    - (BOOL)changeDate:(NSDate *)date otherMinDate:(NSDate *)minDate maxDate:(NSDate *)maxDate
    {
        /*
         1.date为照片的时间
         2.minDate为间隔段的最早时间
         3.maxDate为间隔段的最晚时间
         */
        
        BOOL ischangedate;
        if (!(date == nil))
        {
            BOOL isOne = [date laterDate:minDate] == date ? YES : NO;
            BOOL isTwo = [date earlierDate:maxDate] == date ? YES : NO;
            if (isOne && isTwo) {
                ischangedate = YES;
            } else
            {
                ischangedate = NO;
            }
            
        }
        return ischangedate;
    }
    
    

    下面是各种ALAsset 转换方法

    ALAsset转 本地图片地址,这也是上面方法用到的

    - (NSString *)AlassetImagetoLocaiteString:(ALAsset *)asset
    {
        ALAssetRepresentation* representation = [asset defaultRepresentation];
        NSURL* url = [representation url];
        NSString *imagedtr = [NSString stringWithFormat:@"%@",url];
        return imagedtr;
        
    }
        ```
    ALAsset转 Data
    ```javascript
    - (NSData *)AlassetImageChangeData:(ALAsset *)asset
    {
        CGImageRef img = [asset aspectRatioThumbnail];
        UIImage *inputImage = [UIImage imageWithCGImage:img];
        NSData *imageData = UIImageJPEGRepresentation(inputImage,1.0);
        return imageData;
        
    }
    

    ALAsset转 base64字符串

    - (NSString *)AlassetImageChangetobase64String:(ALAsset *)asset
    {
        CGImageRef img = [asset aspectRatioThumbnail];
        UIImage *inputImage = [UIImage imageWithCGImage:img];
        NSData *imageData = UIImageJPEGRepresentation(inputImage,1.0);
        NSString *encodedImageStr = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
        return encodedImageStr;
        
    }
    

    算是一个小总结吧,希望大家可以用上,使用过程中有问题可以及时交流哦,还请大神们多多请教。
    第一次写就这样吧。哈哈。。。

    相关文章

      网友评论

        本文标题: ALAssetsLibrary 取某时间段内的图片

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