将相机胶卷中的所有图像存储为数组

Posted

技术标签:

【中文标题】将相机胶卷中的所有图像存储为数组【英文标题】:storing all images from camera roll as an array 【发布时间】:2014-03-10 03:46:25 【问题描述】:

我对 ios 和 Objective-C 非常陌生,但我正在尝试创建一个包含一个组件的应用程序,该组件从相机胶卷中获取所有图像并从中创建幻灯片。我相信第一步是从存储在相机胶卷中的所有图像创建一个数组。然后我可以从这个数组创建一个动画。 Currently, I have a button, designated as "play", that when selected should display this slideshow as a UIImageView.但是,我的代码现在不起作用。任何帮助或建议将不胜感激。到目前为止,这是我的代码:

- (IBAction)play:(id)sender 
NSMutableArray *allPhotos= [[NSMutableArray alloc]init];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) 

    [group setAssetsFilter:[ALAssetsFilter allPhotos]];
    [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) 
        if (result == nil) 
            return;
        

        ALAssetRepresentation *representation = [result defaultRepresentation];
        UIImage *image = [UIImage imageWithCGImage:[representation fullScreenImage]];
        [allPhotos addObject:image];
    ];

 failureBlock: ^(NSError *error) 

    NSLog(@"No groups");
];

UIImageView *animationImageView = [[UIImageView alloc] initWithFrame:CGRectMake(60, 95, 86, 193)];
animationImageView.animationImages = allPhotos;
animationImageView.animationDuration = 0.5;

[self.view addSubview:animationImageView];
[animationImageView startAnimating];

【问题讨论】:

如果您告诉我们您发布的代码有什么问题,将会有所帮助。 而且您确实意识到枚举是异步的,因此您在枚举完成之前很久就尝试使用 allPhotosUIImageView 我确实希望您意识到,对于相机胶卷中包含多张图片的任何人来说,您的应用会因内存使用过多而崩溃。 问题是它没有从相机胶卷中返回任何图像或制作幻灯片。如果由于内存使用过多而崩溃,那么制作幻灯片的最佳策略是什么?是否可以使用相机胶卷或者我必须在应用程序中以某种方式保存照片? 你看到我的第二条评论了吗? 【参考方案1】:

See my answer here I posted:

由于 ALAssetsLibrary 现在已弃用,而 Photo Framework 是新的。我在 Objective C 中创建了自己的函数,从相机胶卷中获取所有照片并存储在 NSArray 中并显示在我的 Collectionview 中

 NSArray *imageArray;
 NSMutableArray *mutableArray;

    -(void)getAllPhotosFromCamera
    
        imageArray=[[NSArray alloc] init];
        mutableArray =[[NSMutableArray alloc]init];

        PHImageRequestOptions *requestOptions = [[PHImageRequestOptions alloc] init];
        requestOptions.resizeMode   = PHImageRequestOptionsResizeModeExact;
        requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
        requestOptions.synchronous = true;
        PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:nil];

        NSLog(@"%d",(int)result.count);

        PHImageManager *manager = [PHImageManager defaultManager];
        NSMutableArray *images = [NSMutableArray arrayWithCapacity:[result count]];

        // assets contains PHAsset objects.

        __block UIImage *ima;
        for (PHAsset *asset in result) 
            // Do something with the asset

            [manager requestImageForAsset:asset
                               targetSize:PHImageManagerMaximumSize
                              contentMode:PHImageContentModeDefault
                                  options:requestOptions
                            resultHandler:^void(UIImage *image, NSDictionary *info) 
                                ima = image;

                                [images addObject:ima];
                            ];


        

        imageArray = [images copy];  // You can direct use NSMutuable Array images
    

【讨论】:

以上是关于将相机胶卷中的所有图像存储为数组的主要内容,如果未能解决你的问题,请参考以下文章

如何对相机胶卷中的照片进行方形切割?

从相机胶卷中获取所有图像并将其显示在滚动视图上?

与 Instagram、Facebook 共享相机胶卷中的图像

存储对相机胶卷图像的引用 - Swift 4

将图像保存在相机胶卷中并获取资产 url

如何将png图像保存到相机胶卷?