Как получить тип MIME для изображения или видео в iOS 8 с помощью PHAsset?

Я использую PHAsset в своем приложении, где мне нужно загрузить изображение и видео в api, для этого мне нужен тип изображения и видео mime. В предыдущей версии iOS я использовал следующий код, но в iOS 8 я не знаю, как получить mimetype. Я попытался заглянуть в руководство по программированию Apple PHAsset, но не смог его найти.

ALAssetRepresentation *representation = [asset defaultRepresentation];
NSString *mimeType = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass
        ((__bridge CFStringRef)[representation UTI], kUTTagClassMIMEType);

Ищу руководство.


person Pratik Mistry    schedule 25.02.2015    source источник
comment
Вы смогли найти решение?   -  person Sazzad Hissain Khan    schedule 31.08.2016


Ответы (4)


PHContentEditingInput имеет свойство uniformTypeIdentifier. Дополнительную информацию можно найти в документация.

@import MobileCoreServices.UTType;

...

PHAsset *asset = ...
PHContentEditingInputRequestOptions *options = ...
[asset requestContentEditingInputWithOptions:options completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
    NSString *MIME = (__bridge NSString *)UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)contentEditingInput.uniformTypeIdentifier, kUTTagClassMIMEType);
}];
person Tomasz Bąk    schedule 25.05.2015

В итоге я получил тип MIME для PHAsset следующим образом (iOS 9+):

@implementation PHAsset (UTI)

- (NSString *)utiMimeType
{
    NSString *mimeType = @"image/jpeg";

    NSString *uType = [PHAssetResource assetResourcesForAsset:self].firstObject.uniformTypeIdentifier;
    if (uType) {
        NSString *tagMimeType = (__bridge NSString *)UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)uType, kUTTagClassMIMEType);
        if (tagMimeType)
            mimeType = tagMimeType;
    }

    return mimeType;
}

@end

Пара вещей, которые стоит упомянуть / способы улучшения:

  1. Я выбрал по умолчанию image / jpeg, если mimeType не может быть получен.
  2. Предполагается, что первый ресурс является подходящим. Не может быть в случае активов с несколькими ресурсами (Live Photos и т. Д.).
  3. Я еще не тестировал, как / если это работает должным образом для активов в iCloud, которые необходимо загрузить.

Если у кого-то есть представление о № 2 или № 3, мы будем очень признательны. Я обновлю свой ответ, когда узнаю больше.

person Chad Podoski    schedule 03.10.2018
comment
Является ли jpeg форматом изображений по умолчанию в iOS? - person hannojg; 28.12.2020

Также вы можете найти uniformTypeIdentifier из класса PHContentEditingInput. Для этого; использовать функцию requestContentEditingInput из PHAsset

Не забудьте импортировать MobileCoreServices

Пример кода Swift 3.1:

import MobileCoreServices


let options = PHContentEditingInputRequestOptions()
options.isNetworkAccessAllowed = true //for icloud backup assets

let asset : PHAsset = .....  //sampleAsset
asset.requestContentEditingInput(with: options) { (contentEditingInput, info) in
    if let uniformTypeIdentifier = contentEditingInput?.uniformTypeIdentifier {

        //check type here
        if uniformTypeIdentifier == (kUTTypeGIF as String) {
            debugPrint("This asset is a GIF????")
        }

    }
}
person sirman    schedule 16.08.2017

Используйте метод requestImageDataForAsset для PHImageManager. В его resultBlock метод возвращает UTI-Type для актива.

person holtmann    schedule 01.03.2015
comment
Извините, я забыл упомянуть, но я использую то же самое для изображения, я не знаю, как получить пантомим для видео. - person Pratik Mistry; 01.03.2015