如何通过提供文件路径在默认图像查看器中打开图像?

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

FBGrab 提供黑色 .png 图像

如何从 Flash 查看器中提取图像?

如何在反应原生网格图像查看器中传递动态获取的图像数组数据,并在反应原生中使用标题

如何使用 jCIFS 在 Android 中使用默认查看器打开文件

上传图片到apk