通过从 FilePath 获取图像将图像加载到 ImageView

Posted

技术标签:

【中文标题】通过从 FilePath 获取图像将图像加载到 ImageView【英文标题】:Loading Image into ImageView by taking the Image from FilePath 【发布时间】:2016-11-12 16:20:11 【问题描述】:
- (IBAction)chooseImgBtnClick:(id)sender 
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentViewController:picker animated:YES completion:NULL];



-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
    _image=[info objectForKey:UIImagePickerControllerOriginalImage];
    [_vehicleImageView setImage:_image];
    [self dismissViewControllerAnimated:YES completion:NULL];_vehicleImageView.image= [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    NSData *webData = UIImagePNGRepresentation(_vehicleImageView.image);
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *localFilePath = [documentsDirectory stringByAppendingPathComponent:@"png"];
    [webData writeToFile:localFilePath atomically:YES];
    NSLog(@"localFilePath.%@",localFilePath);
    _filePath=localFilePath;

使用上面的代码,我从库中选择一张照片并将照片设置在 UIImageView 中,并尝试将路径放入名为 localFilePath 的字符串中。我将路径分配给 _filepath。

现在我编写了一个函数来从文件路径中获取图像并在单击另一个按钮时将图像加载到另一个 UIImageView 中。 但是图像没有被加载。请指教

下面是函数。

- (IBAction)loadSecondView:(id)sender 
    NSData *pngData = [NSData dataWithContentsOfFile:_filePath];
    UIImage *image = [UIImage imageWithData:pngData];
    [_secondImageView setImage:image];

 

【问题讨论】:

只有三种可用的sourceType,其中一种是相机。除非您想要相机胶卷(sourceType == savedPhotosAlbum),否则如果没有更详细的示例,很难知道您在寻找什么。 ios 设备上的“任何目录”要么不明确(您是指 iCloud 还是其他“设备外”的地方?),要么不可能(iOS 设备没有目录的概念)。请提供更多详细信息.... 我同意@dfd。请在此处阅读答案:- ***.com/a/1082265/4525734 另外,这是指向 Apple 文档的链接:developer.apple.com/reference/uikit/… 是否不能从 Documents 文件夹或项目中创建的任何包含图像的文件夹中选择图像? 允许用户选择?不会。用户如何将图像放入他们 iOS 设备上的 Documents 文件夹或其他文件夹中?或者你说的是在 Mac 上?您在问题中提到了 Mac 的目录,但不清楚您的意思是什么?你的意思是通过网络获取它?如果是这样,您可以编写自己的图像浏览器,该浏览器与 Mac 上的守护程序对话并告诉您在哪里。 【参考方案1】:

iOS 虽然更接近让用户想到“文件”和“目录”,但并没有完全实现这一点。我认为最后你有几个选择供你使用。我将按可成立性的降序列出它们:

(1) 按“原样”使用操作系统 - 相机、相机胶卷、照片库。这可能需要对您正在做的事情进行一些重构,但这也是“iOS 方式”。

(2) 使用iCloud Drive and the Document Picker。该链接指向高级解释。使用它,您可以获得更多“Apple 方式”,但您现在限制用户将内容存储在 iCloud 中。

(3) 使用名为 Document Provider 的应用程序扩展。我从未使用过这个(还),但我相信这会在“云”中进一步扩展内容,并让您能够读取/写入 Dropbox 等。提醒一句:我使用了照片编辑应用程序中的扩展程序,并且您必须忍受很多“陷阱”。扩展程序在 UI 方面比应用程序更受限制。

(4) 我不知道这是否可行,但如果你真的被卡住了,也许你可以使用某种形式的“深度链接”让你的应用程序成为打开某些图像的默认应用程序。虽然这是一个很长的尝试 - 我真的认为它不会奏效。

【讨论】:

【参考方案2】:

我确实将图像名称保存到属性中。之后我使用下面的代码从特定路径取回图像并放入 ImageView。

-(UIImage*) getImage:(NSString *) imageName

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString* path = [documentsDirectory stringByAppendingPathComponent:
                      imageName ];
    UIImage* image = [UIImage imageWithContentsOfFile:path];
    NSLog(@"%@",image);
    return image;


【讨论】:

以上是关于通过从 FilePath 获取图像将图像加载到 ImageView的主要内容,如果未能解决你的问题,请参考以下文章

如何通过从数据库中获取像素值来为图像着色

通过从缩略图或下一个上一个按钮中选择来更改图像

JavaFX 2.0+ WebView /WebEngine 将网页呈现为图像

将 jQuery 插件转换为 Kentico Web 部件

如何将图像从相机/UIImagePickerController 动态添加到 iPhone 中的 iCarousel

如何从用户手机获取联系人 URI 并在 android 中使用 glide 加载