2016-02-12 82 views
10

我不知道爲什麼這是如此困難。我試圖確定PHAsset的文件類型,具體來說,我想知道給定的資產是否代表GIF圖像。如何正確檢測PHAsset的文件類型(GIF)

簡單地檢查資產的文件名告訴我,這是一個MP4:

[asset valueForKey:@"filename"] ==> "IMG_XXXX.MP4"

的iOS是否保存時對設備的圖像庫轉換GIF對視頻?我也嘗試過提取圖像的數據並查看它的dataUTI,但它只是返回nil GIF(我假設所有視頻也是)。我獲取的圖像數據如下:

PHImageManager *manager = asset.imageManager ? asset.imageManager : [PHImageManager defaultManager]; 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

    PHImageRequestOptions *o = [[PHImageRequestOptions alloc] init]; 
    o.networkAccessAllowed = YES; 

    [manager requestImageDataForAsset:asset.asset options:o resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) { 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      CIImage *ciImage = [CIImage imageWithData:imageData]; 
      if(completion) completion(imageData, dataUTI, orientation, info, ciImage.properties); 
     }); 

    }]; 

}); 

的dataUTI從上面的調用返回的nil

如果有人知道確定PHAsset的文件類型的可靠方法(我特意尋找GIF的,但能夠確定任何類型的文件將是偉大的)讓我知道!

+0

沒有你找到答案? –

+0

你找到答案了嗎? –

回答

2

首先,我不確定GIF圖像是什麼意思。
您是指實時照片還是延時?

但是,如果你想查看當前資產Live照片,時移,那麼你可以檢查這樣

if(asset.mediaSubtypes == PHAssetMediaSubtypePhotoLive) 
{ 
    // this is a Live Photo 
} 

if(asset.mediaSubtypes == PHAssetMediaSubtypeVideoTimelapse) 
{ 
    // this is a Time-lapse 
} 

用於確定PHAsset的通用文件類型,你可以檢查

asset.mediaType == PHAssetMediaTypeImage 
    asset.mediaType == PHAssetMediaTypeVideo 
    asset.mediaType == PHAssetMediaTypeAudio 
+2

他意味着以.gif格式(動畫圖像)的圖像,而不是實時照片或時間流逝。 .png,.jpg,.gif,.tiff是所有類型的圖像。 iOS上的照片可以存儲GIF,他問你如何檢測圖像是否爲GIF。 –

7

使用PHAssetResource。

NSArray *resourceList = [PHAssetResource assetResourcesForAsset:asset]; 
    [resourceList enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
     PHAssetResource *resource = obj; 
     if ([resource.uniformTypeIdentifier isEqualToString:@"com.compuserve.gif"]) { 
      isGIFImage = YES; 
     } 
    }]; 
3

您也可以從PHContentEditingInput類找到uniformTypeIdentifier。爲了這;使用requestContentEditingInput功能從PHAsset

不要忘記 進口MobileCoreServices爲kUTTypeGif

樣品雨燕3.1代碼:

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 { 

      if uniformTypeIdentifier == (kUTTypeGIF as String) { 
       debugPrint("This asset is a GIF") 
      } 

     } 
    } 
1

對於雨燕3.0及以上

import MobileCoreServices 


var isGIFImage = false 
if let identifier = asset.value(forKey: "uniformTypeIdentifier") as? String 
{ 
    if identifier == kUTTypeGIF as String 
    { 
    isGIFImage = true 
    } 
}