如何获取从 iPhone 库中选择的多个图像的路径?

Posted

技术标签:

【中文标题】如何获取从 iPhone 库中选择的多个图像的路径?【英文标题】:How to get the path of multiple images selected from library in iPhone? 【发布时间】:2013-08-20 05:02:44 【问题描述】:

我是 iPhone 应用开发的新手。在我的代码中,我可以从库中选择多个图像并仅获取 1 个图像的路径。然后我在名为“images”的文件夹中的 Documents 目录中创建该图像的副本并尝试对其进行压缩。现在我想获取所有选择的多个图像的路径,将它们复制到同一文件夹“images”中的文档目录中,然后我想压缩它们。 请告诉我如何在我的代码中完成上述任务。 这是我的代码现在的样子:

- (void) imagePickerController:(QBImagePickerController *)imagePickerController didFinishPickingMediaWithInfo:(NSDictionary *)info

   if (imagePickerController.allowsMultipleSelection) 
    NSArray *mediaInfoArray = (NSArray *)info;
    NSLog(@"Selected %d photos", mediaInfoArray.count);
    NSData *webData = UIImagePNGRepresentation([[mediaInfoArray objectAtIndex:0] objectForKey:@"UIImagePickerControllerOriginalImage"]);
   NSLog(@"web data length is: %u",[webData length]);
   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
   NSString *documentsDirectory = [paths objectAtIndex:0];
   NSString *localFilePath = [documentsDirectory stringByAppendingString:@"/images.png"];
   [webData writeToFile:localFilePath atomically:YES];

   NSLog(@"localFilePath.%@",localFilePath);

【问题讨论】:

这会对您有所帮助。 ***.com/questions/8376511/… 我投反对票,因为你没有接受答案。 【参考方案1】:

我使用相同的 QBImagePickerController 并使用下面的此方法在 NSMutableArray 中添加了多个图像。请检查,一旦它们被添加到数组中,您可以在任何需要的地方添加它们。

- (void)imagePickerController:(QBImagePickerController *)imagePickerController didFinishPickingMediaWithInfo:(id)info
    
        if(imagePickerController.allowsMultipleSelection)
        
            NSArray *mediaInfoArray = (NSArray *)info;        
            for (int i =0; i<mediaInfoArray.count ; i++)
            
                NSString *stringPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"/Folder/Selected Files"];
                dispatch_async(dispatch_get_main_queue(), ^
                    NSData *data = UIImageJPEGRepresentation([[mediaInfoArray valueForKey:@"UIImagePickerControllerOriginalImage"] objectAtIndex:i], 1.0);
                    NSString *fileName = [stringPath stringByAppendingPathComponent:[NSString stringWithFormat:@"Image%d.png",i]];
                    [data writeToFile:fileName atomically:YES];
                );
                [ImagesArray addObject:[[mediaInfoArray valueForKey:@"UIImagePickerControllerOriginalImage"] objectAtIndex:i]];
            
        
        else
        
            //NSDictionary *mediaInfo = (NSDictionary *)info;
            //NSLog(@"Selected: %@", mediaInfo);
        
               
        [TableView reloadData];        
        [self dismissViewControllerAnimated:YES completion:NULL];
    

希望这会有所帮助...

编辑:

好吧,我给了你一个更好的解决方案,因为保存在缓存目录中总是比保存在文档目录中更好,请检查is saving in NSDocumentDirectory okay?

但是如果你想把它保存在 Documents 目录中,那么你可以简单地替换

NSString *stringPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"/Folder/Selected Files"];

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"savedImage.png"];

【讨论】:

好的,谢谢@IronManGill。我会在我的代码中尝试并检查一次。 我没有得到。我想在文件夹的文档目录中创建这些选定图像的副本。当我复制您的代码时,该文件夹将在 Library->cache 中创建。 现在我可以在控制台中查看创建文件夹的路径和所选图像的详细信息数量。但是当我签入查找器时,我看不到文档目录中的文件夹。 嘿,非常感谢。根据我的要求编辑代码后,它现在可以工作了。 是的,输出是正确的。但我有最后一个关于动态文件夹创建的问题。

以上是关于如何获取从 iPhone 库中选择的多个图像的路径?的主要内容,如果未能解决你的问题,请参考以下文章

将图像设置为库中的图像视图,而不从图像库中选择图像

如何通过iphone中的sqlite获取路径来显示文档目录中保存的图像

如何从 iPhone 的图库中选择图像的路径?

在 Flutter 中使用 Multi Image Picker 选择图像后如何获取图像路径?

如何在 iphone 中释放系统库分配(框架相关)

如何在 iPhone 中快速从文件路径 url 获取视频或图像?