2014-09-29 8 views
2

Когда я использую фильтры в стандартном приложении «Фотографии» в IOS8, я не могу получить полные метаданные. Стараюсь два метода извлечения метаданных:IOS8. Фотографий ошибка приложения?

[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; 
}; 

Кто-нибудь нашел решение, как получить метаданные изображений, отредактированных в фотографиях?

Я хочу видеть, как это метаданные:

link

+0

Какие метаданные информации вы ищете, в частности? – rickster

ответ

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]; 
}]; 
0

Я попытался точно такой же код, как и любой другой альтернативный механизм для получения исходных данных изображения из фотографий приложение в XCode IOS 8 тренажере а единственное, что возвращается для любого изображения. Я в приложении для фотографий под симулятором практически пуст. EXIF ​​- почти то же самое, что проиллюстрировано в исходном вопросе.

Возникает вопрос: Is is isolated to ONLY the simulator? Есть ли проблема с добавлением изображений в приложение «Фото» в симуляторе с помощью перетаскивания?

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)") 
     } 
    }) 

все производят одни и те же результаты в имитаторе XCode IOS для 8.0/8.1.

Работает ли ваш код для симулятора? Это похоже на второй образец, который я предоставил, но это не так.

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

Смежные вопросы