2017-02-13 7 views
1

Я хочу получить URL-адрес изображения из фотогалереи iPad.Фотобиблиотека URL-адрес изображения «assets-library: //asset/asset.JPG? Id = 1000000007 & ext = JPG» is nil

Когда я пытаюсь получить UIImagePickerControllerReferenceURL от информации о Image Piicker
я получаю URL как:

assets-library://asset/asset.JPG?id=1000000007&ext=JPG 

Потому что я хочу, чтобы получить изображение метаданных (image height,width and size in MB) без загрузки в память.

Я попытался ниже код:

-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info 
    { 
     NSURL *mediaURL; 
     mediaURL=(NSURL*)[info valueForKey:UIImagePickerControllerMediaURL]; 
     NSURL *imageFileURL = (NSURL*)[info valueForKey:UIImagePickerControllerReferenceURL]; 

     NSLog(@" referenURL %@ mediaURL %@" ,imageFileURL,mediaURL); 

     //We can get Image property from imagepath. 
     //NSURL *imageFileURL = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@",_directoryPath,roomImageNames[i]]]; 
     CGImageSourceRef imageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)imageFileURL, NULL); 
     NSDictionary *properties = (__bridge_transfer NSDictionary *)CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL); 

     CGFloat height = [[properties objectForKey:@"PixelHeight"] floatValue]; 
     CGFloat width = [[properties objectForKey:@"PixelWidth"] floatValue]; 
     NSLog(@"height %f width %f",height ,width); 
} 

Я получаю высоту и ширину изображения, как 0,0

Позвольте мне знать, если я делаю что-то неправильно.

+0

Если вы не сохранили, у вас еще нет URL-адреса. – user3344236

ответ

1

После iOS8, вы должны использовать Photos.framework для доступа к библиотеке системных фотографий.

Единственная фотомодель - объект экземпляра PHAsset. Он имеет pixelWidth и pixelHeight свойства, в которых хранится информация о текущем фото. Выполнив эти данные, вы можете рассчитать размер своей памяти.

1

Эти функции позволяют получить доступ к некоторым метаданным изображения без необходимости загружать фактические данные пикселей в память. Например, получение размеров пикселя как это работает (не забудьте включить ImageIO.framework в вашей цели):

#import <ImageIO/ImageIO.h>

NSURL *imageFileURL = [NSURL fileURLWithPath:...]; 
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)imageFileURL, NULL); 
if (imageSource == NULL) { 
    // Error loading image 
    ... 
    return; 
} 

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
         [NSNumber numberWithBool:NO], (NSString *)kCGImageSourceShouldCache, 
         nil]; 
CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, (CFDictionaryRef)options); 
if (imageProperties) { 
    NSNumber *width = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth); 
    NSNumber *height = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight); 
    NSLog(@"Image dimensions: %@ x %@ px", width, height); 
    CFRelease(imageProperties); 
} 
CFRelease(imageSource); 

Для получения более подробной информации: Accessing Image Properties Without Loading the Image Into Memory