【问题标题】:How to retrieve photo extension (jpg/png) in iOS 8.0 using Photos API?如何使用 Photos API 在 iOS 8.0 中检索照片扩展名 (jpg/png)?
【发布时间】:2014-09-18 18:07:10
【问题描述】:

我正在尝试使用 iOS 8 中的新照片 API 获取照片的文件扩展名,但直到现在还没有找到这样做的方法。在 iOS 8.0 之前,我会使用 ALAssetRepresentation 来获取文件扩展名,例如:

// Get asset representation from asset
ALAssetRepresentation *assetRepresentation = [asset defaultRepresentation];

// Extract file extension from the original file name
NSString* fileExt = [[assetRepresentation filename] pathExtension];

现在有什么方法可以获取照片的文件扩展名吗? PS:我正在使用新的照片 API,因为我需要访问我的照片应用程序中的所有照片,而 ALassetsLibrary 只允许访问“最近添加”的照片。

【问题讨论】:

    标签: ios8 photos photosframework


    【解决方案1】:

    我知道了。

    [[PHImageManager defaultManager] requestImageDataForAsset:asset options:imageRequestOptions resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
    
            NSLog(@"info - %@", info);
        }];
    
    PHImageFileDataKey = <PLXPCShMemData: 0x179ab6d0> bufferLength=1384448 dataLength=1384448;
    PHImageFileOrientationKey = 1;
    PHImageFileSandboxExtensionTokenKey = "c05e608acaf0bb212086ed2d512ccc97ea720ac3;00000000;00000000;0000001a;com.apple.app-sandbox.read;00000001;01000003;0000000000030b8c;/private/var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG";
    PHImageFileURLKey = "file:///var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG";
    PHImageFileUTIKey = "public.jpeg";
    PHImageResultDeliveredImageFormatKey = 9999;
    PHImageResultIsDegradedKey = 0;
    PHImageResultIsInCloudKey = 0;
    PHImageResultIsPlaceholderKey = 0;
    PHImageResultWantedImageFormatKey = 9999;
    

    【讨论】:

    • 你知道我们怎样才能得到相同的视频或音频吗?
    • 可以检查-requestPlayerItemForVideo方法
    • @GarimaSrivastava 您实际上可以使用相同的方法来获取视频的信息,只是不会传回所有相同的对象!
    • @alex 并非所有上述密钥都记录在公共 API 中或出现在公共 API 中。如果 Apple 决定或删除或重命名它们,我只是担心现在使用它们可能会在将来破坏它们。
    • 此调用需要网络访问来确定云中项目的 UTI。有什么办法吗?似乎照片框架在下载之前不知道云中的图像是什么格式,如果您只想从库中获取 GIF,那是相当不理想的!
    【解决方案2】:

    这是一种方法:

    PHImageRequestOptions * imageRequestOptions = [[PHImageRequestOptions alloc] init];
    imageRequestOptions.synchronous = YES;
    
    [[PHImageManager defaultManager]
     requestImageForAsset:asset
     targetSize:CGSizeMake(2048, 2048)
     contentMode:PHImageContentModeAspectFit
     options:imageRequestOptions
     resultHandler:^(UIImage *result, NSDictionary *info) {
     }];
    

    文件名包含在 info.例如:

    PHImageFileURLKey = "file:///var/mobile/Media/DCIM/100APPLE/IMG_0066.JPG";
    

    【讨论】:

    • info 中没有这样的键。它们是:PHImageFileOrientationKey = 0; PHImageResultDeliveredImageFormatKey = 4031; PHImageResultIsDegradedKey = 0; PHImageResultWantedImageFormatKey = 4031;
    • 这是一个有效的答案。尝试对 targetSize 使用原始尺寸或最大尺寸。
    • 此调用需要网络访问来确定云中项目的 UTI。有什么办法吗?似乎照片框架在下载之前不知道云中的图像是什么格式,如果您只想从库中获取 GIF,那是相当不理想的!
    • 对于使用 PHImageFileURLKey 的视频,影片资产的文件名不正确,最后 .jpg 上的标签而不是 .MOV 使用 requestAVAssetForVideo 返回正确的文件名,但它嵌入在 PHImageFileSandboxExtensionTokenKey 中,看起来像“ f24525397a8e061d41adb973502e7574eaf07390; 00000000; 00000000; 000000000000001b; com.apple.avasset.read仅; 00000001; 01000004; 0000000000fdce91; /用户/用户名/库/开发者/ coresimulator /装置/ 7630c944-177a-4899-b5ac-7a52f30b0fff /数据/媒体/dcim/100apple/img_0006.mov”。不那么容易提取
    【解决方案3】:

    **imageManager.requestImageDataForAsset((images[indexPath.row] as PHAsset), options:PHImageRequestOptions(), resultHandler: {imagedata,dataUTI,Orientation,info in

    var str:String=((((info as Dictionary)["PHImageFileURLKey"])! as NSURL).lastPathComponent as String) cell.imageName.text=str as String**

    【讨论】:

      【解决方案4】:

      这些也是从照片中选择原始文件名的简单方法

      PHAsset *asset; // Init this object with your PHAsset object 
      
      //and then use below line 
      NSLog(@"asset ext : %@",[[asset valueForKey:@"filename"] pathExtension]);
      

      【讨论】:

        猜你喜欢
        • 2018-11-30
        • 2015-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多