如何通过提供文件路径在默认图像查看器中打开图像?
Posted
技术标签:
【中文标题】如何通过提供文件路径在默认图像查看器中打开图像?【英文标题】:How can I open an Image in a default Image Viewer by providing the path of the file? 【发布时间】:2015-06-17 08:49:11 【问题描述】:在我的项目中,如果用户单击图像,我将获得带有图像文件名的路径。我需要在 iPhone 的默认图像查看器中打开图像。
提前致谢
【问题讨论】:
您对默认图像查看器的想法是什么? 默认图像查看器是指当我们从图库中选择图像时打开图像的查看器 我认为这仍然是图库或更好的照片应用程序。要将图片导出到图库,还是要在自己的应用中以图库视图打开图片? 我的项目是一个聊天应用程序...我正在使用 ftp 进行文件传输..如果有人自动发送图像文件,它将被下载并显示在聊天窗口中..当用户单击该图像,我需要在图像查看器中打开它,他们可以在其中放大、缩小等 检查UIDocumentInteractionController
类。
【参考方案1】:
我在我的一个项目中使用了 QLPreviewController。我认为这是一个最容易实施的选择。另外我不知道它是否是您正在寻找的解决方案。
我用下面的代码创建了它
Class qlookclass = NSClassFromString(@"QLPreviewController");
if(qlookclass)
//check if the image exists
if([[NSFileManager defaultManager] fileExistsAtPath:@"someimage.png"])
id quickLookPreview = [[qlookclass alloc]init];
[quickLookPreview setDataSource:self];
[self presentModalViewController:quickLookPreview animated:YES];
[quickLookPreview release];
这些是委托方法
#pragma mark QLPreviewController delegate methods
- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller
return 1;
- (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index
NSURL *imageURL = [NSURL fileURLWithPath:@"someimage.png"];
return imageURL;
您需要添加 QLPreviewControllerDelegate 和 QLPreviewControllerDataSource。
这已经是问题中公认的答案 is there a class to get the default picture viewer in an app?
希望对你有帮助...
【讨论】:
【参考方案2】:检查此问题并回答Get the last saved Photo in photo album
如果您的图片未保存在照片中,请先使用
保存图片UIImageWriteToSavedPhotosAlbum(UIImage *image,
id completionTarget,
SEL completionSelector,
void *contextInfo);
https://***.com/a/179066/3976183
或者您可以使用photos-redirect://
URL 方案,它适用于照片应用程序。
或者你可以使用UIImagePickerController
还要检查这个https://***.com/a/8872425/3976183 答案。
【讨论】:
【参考方案3】:您可以使用画廊或实现您自己的。
只要 google 一下,你会发现很多 ios 的画廊项目,你也可以从中学习如何自己创建一个。
我已经用过的一个不错的是:https://github.com/mariohahn/MHVideoPhotoGallery
【讨论】:
【参考方案4】:有几种方法可以在默认视图中查看图像。
@interface YourViewController : UIViewController<QLPreviewControllerDataSource,QLPreviewControllerDelegate>
arrImages = [[NSArray alloc] initWithObjects:@"img_1.jpg", @"img_2.jpg", nil];
QLPreviewController *previewController = [[QLPreviewController alloc]init];
previewController.delegate = self;
previewController.dataSource = self;
[self presentViewController:previewController animated:TRUE completion:^ ];
#pragma mark - Preview Delegate
- (NSInteger)numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller
return [arrImages count];
- (id <QLPreviewItem>)previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
NSArray *fileComponents = [[arrayOfDocuments objectAtIndex: index] componentsSeparatedByString:@"."];
NSString *path = [[NSBundle mainBundle] pathForResource:[fileComponents objectAtIndex:0] ofType:[fileComponents objectAtIndex:1]];
return [NSURL fileURLWithPath:path];
另一种方法是:
NSString* path = [[NSBundle mainBundle] pathForResource:@"imgName" ofType:@"jpg"];
if (path)
NSURL* url = [NSURL fileURLWithPath:path];
UIDocumentInteractionController* docController = [UIDocumentInteractionController interactionControllerWithURL:url];
docController.delegate = self;
[docController presentPreviewAnimated:YES];
【讨论】:
以上是关于如何通过提供文件路径在默认图像查看器中打开图像?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用手机的本机应用程序打开图像 - Cordova / phonegap
如何在反应原生网格图像查看器中传递动态获取的图像数组数据,并在反应原生中使用标题