2

IOS8 の標準の写真アプリケーションでフィルターを使用すると、完全なメタデータを取得できません。メタデータをフェッチする 2 つの方法を試します。

[manager requestImageDataForAsset:asset options:options resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
    CIImage *ciimage = [CIImage imageWithData:imageData];
    NSMutableDictionary *exif = [NSMutableDictionary dictionary];
    [exif addEntriesFromDictionary:ciimage.properties];
}];

[asset requestContentEditingInputWithOptions:editOptions completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
    CIImage *cimage = [CIImage imageWithContentsOfURL:contentEditingInput.fullSizeImageURL];
    NSMutableDictionary *exif = [NSMutableDictionary dictionary];
    [exif addEntriesFromDictionary:cimage.properties];
}];

アプリケーションの写真に関する言及は見つかりませんでした。私は常にそのような結果を得ます:

{
ColorModel = RGB;
DPIHeight = 72;
DPIWidth = 72;
Depth = 8;
Orientation = 1;
PixelHeight = 2592;
PixelWidth = 1936;
"{Exif}" =     {
    ColorSpace = 1;
    PixelXDimension = 1936;
    PixelYDimension = 2592;
};
"{JFIF}" =     {
    DensityUnit = 1;
    JFIFVersion =         (
        1,
        0,
        1
    );
    XDensity = 72;
    YDensity = 72;
};
"{TIFF}" =     {
    Orientation = 1;
};

写真で編集された画像のメタデータを取得する方法を見つけた人はいますか?

次のようなメタデータを表示したい:

リンク

4

4 に答える 4

2

元のメタデータを取得する方法を見つけました:

PHImageRequestOptions *options = [PHImageRequestOptions new];
options.networkAccessAllowed = YES;
options.synchronous = YES;
options.version = PHImageRequestOptionsVersionOriginal;

[manager requestImageDataForAsset:asset options:options resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
    CIImage *ciimage = [CIImage imageWithData:imageData];
    NSMutableDictionary *exif = [NSMutableDictionary dictionary];
    [exif addEntriesFromDictionary:ciimage.properties];
}];
于 2014-09-30T01:27:48.737 に答える
0

とても奇妙です。

NSString *albumName = @"albumName"
PHFetchOptions *fetchOption = [[PHFetchOptions alloc]init];
fetchOption.predicate = [NSPredicate predicateWithFormat:@"title == %@",albumName];

PHFetchResult *result = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:fetchOption];

PHFetchOptions *fetchOption = [[PHFetchOptions alloc]init];
fetchOption.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
fetchOption.predicate = [NSPredicate predicateWithFormat:@"mediaType == 1"];
fetchOption.wantsIncrementalChangeDetails = YES;
PHFetchResult *result = [PHAsset fetchAssetsInAssetCollection:[result firstObject] options:nil];

//MetaData here is not complicated as you get
[result[0] requestContentEditingInputWithOptions:nil completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
    CIImage *image = [CIImage imageWithContentsOfURL:contentEditingInput.fullSizeImageURL];
    NSDictionary *metaData = [[NSDictionary alloc]initWithDictionary:image.properties];
    NSLog(@"metadata: %@", image.properties.description);
}];

上記のコードを使用すると、メタデータは複雑ではありません。その後..

NSString *type = [NSString stringWithFormat:@"mediaType == 1 && (pixelWidth != %f && pixelHeight != %f)",SCREEN_WIDTH*scale,SCREEN_HEIGHT*scale];

allPhotosfetchOption.predicate = [NSPredicate predicateWithFormat:type];
PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:allPhotosfetchOption];

[result[0] requestContentEditingInputWithOptions:nil completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
    CIImage *image = [CIImage imageWithContentsOfURL:contentEditingInput.fullSizeImageURL];
    NSDictionary *metaData = [[NSDictionary alloc]initWithDictionary:image.properties];
    NSLog(@"metadata: %@", image.properties.description);
}];

ここで完全なメタデータを取得できます... Photos.framework のバグの 1 つだと思います

于 2015-05-27T10:58:54.463 に答える
0

XCode IOS 8シミュレーターで写真アプリから元の画像データを取得するために、まったく同じコードと他のすべての代替メカニズムを試しましたが、シミュレーターの下の写真アプリで画像に対して返される唯一のものは、実質的に空のEXIFです-- 元の質問に示されているものとほとんど同じです。

質問は次のとおりです。これはシミュレーターのみに分離されていますか? ドラッグ アンド ドロップでシミュレーターの写真アプリに画像を追加する際に問題はありますか?

PHImageManager.defaultManager().requestImageForAsset(assetImage as PHAsset, targetSize:PHImageManagerMaximumSize, contentMode: .AspectFill, options: nil, resultHandler: { (initialResult, _) in
        self.photoImageView.image = initialResult as UIImage
        println("WTF")
        println(initialResult)
    })

この

PHImageManager.defaultManager().requestImageDataForAsset(assetImage, options: imageRequestOptions, resultHandler: { (imageData: NSData!, dataUti: String!, orientation: UIImageOrientation, _) in
        println("requestImageDataForAsset")
        println(imageData)
        let imageTest = CIImage(data: imageData)
        println(imageTest)
        let imageMeta = imageTest.properties()
        println(imageMeta)
    })

この

        assetImage.requestContentEditingInputWithOptions(initialRequestOptions, completionHandler: { (input: PHContentEditingInput!, _)  -> Void in
        //Get full image
        let url = input.fullSizeImageURL
        let orientation = input.fullSizeImageOrientation
        var inputImage = CIImage(contentsOfURL: url)
        inputImage = inputImage.imageByApplyingOrientation(orientation)

        for (key, value) in inputImage.properties() {
            println("key: \(key)")
            println("value: \(value)")
        }
    })

8.0/8.1 の XCode IOS シミュレーターでは、すべて同じ結果になります。

あなたのコードはシミュレーターで動作しますか? 私が提供した 2 番目のサンプルと同じように見えますが、そうではありません。

于 2014-10-27T23:35:59.247 に答える