首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列出照片库中的所有gif文件

列出照片库中的所有gif文件
EN

Stack Overflow用户
提问于 2017-07-21 07:06:28
回答 3查看 2.2K关注 0票数 10

我有一个要求,用户需要从库中的gif文件列表中获取gif。我试图获取这两个图像和视频,没有任何问题。但是,当我使用kUTTypeGIF作为媒体时,它会出现错误:

由于“NSInvalidArgumentException”异常终止应用程序,原因:“源0没有可用类型”

这是我的代码:

代码语言:javascript
复制
#import "ViewController.h"
#import <MobileCoreServices/MobileCoreServices.h>

@interface ViewController ()<UIImagePickerControllerDelegate, UINavigationControllerDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}

-(IBAction)btnChooseGif:(id)sender {
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    imagePicker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeGIF, nil];   // Here is the crash 
    [self presentViewController:imagePicker animated:YES completion:nil];
}

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{

}
@end

我怎么才能解决这个问题?如果这里不支持kUTTypeGIF媒体,我如何向用户显示所有gif文件以供选择?我只需要在UIImagePickerController中显示gif文件

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-24 05:15:44

iOS不给您一种简单的方法来确定--同时使用UIImagePickerController --存储在相机卷中的图片的底层文件格式。苹果的理念是,图像应该被看作是一个UIImage对象,你不应该关心最终的文件格式是什么。

因此,由于不能使用UIImagePickerController过滤出GIF文件。以下是几种可能的选择:

1)

一旦您选择一个图像,您可以确定它是什么样的文件。Here's an example question that asks how to determine if the image is a PNG or JPEG。一旦用户选择了一个文件,您就会知道它是GIF、JPEG还是PNG之类的。

2)

您可以将任何UIImage转换为GIF文件。Here's a question that points to a library that might be able to help

3)

您可以遍历整个相机卷,并将这些图像转换/保存到应用程序的文档目录中,作为GIF文件。启动with enumeration found in this related question,然后通过ImageIO框架运行每个图片,将其转换为gif文件(我在解决方案2中指出了该文件的代码)。然后你可以自己选择。

附注:您自己的代码无法工作,因为正如内森所指出的,gif不是媒体类型。这是一个指出可用媒体类型的函数:

代码语言:javascript
复制
-(IBAction)btnChooseGif:(id)sender {
    NSArray *availableMedia = [UIImagePickerController availableMediaTypesForSourceType: UIImagePickerControllerSourceTypePhotoLibrary];

    NSLog(@"availableMedia is %@", availableMedia);

    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    imagePicker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeImage, nil];
    [self presentViewController:imagePicker animated:YES completion:nil];
}
票数 3
EN

Stack Overflow用户

发布于 2017-07-26 12:48:00

如果您只想在没有选择器的情况下从Photos库中获取资产,则可以使用PHFetchResult获取PHAsset数组。下面是在MediaType enums中可用的可用Photos.Framework列表

代码语言:javascript
复制
typedef NS_ENUM(NSInteger, PHAssetMediaType) {
PHAssetMediaTypeUnknown = 0,
PHAssetMediaTypeImage   = 1,
PHAssetMediaTypeVideo   = 2,
PHAssetMediaTypeAudio   = 3,
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);

您可以将其用作:

代码语言:javascript
复制
PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:nil];

并向资产请求图像如下:

代码语言:javascript
复制
PHImageManager *manager = [PHImageManager defaultManager];

    PHImageRequestOptions *requestOptions = [[PHImageRequestOptions alloc] init];
    requestOptions.resizeMode   = PHImageRequestOptionsResizeModeExact;
    requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
    requestOptions.synchronous = true;

[manager requestImageDataForAsset:asset options:requestOptions resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
 NSLog(@"Data UTI :%@ \t Info :%@",dataUTI,info);
            }];

希望这能帮到你!!

票数 3
EN

Stack Overflow用户

发布于 2017-12-01 07:13:25

在iOS 11中,您可以通过智能相册获得所有gif。

代码语言:javascript
复制
func getGif() -> PHFetchResult<PHAsset> {
     if let gifCollection = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .smartAlbumAnimated, options: nil).firstObject {
        return PHAsset.fetchAssets(in: gifCollection, options: nil)
    }
    return PHFetchResult<PHAsset>()
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45231177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档