照片库图像 URL “assets-library://asset/asset.JPG?id=1000000007&ext=JPG”为 nil
Posted
技术标签:
【中文标题】照片库图像 URL “assets-library://asset/asset.JPG?id=1000000007&ext=JPG”为 nil【英文标题】:Photo Library Image URL "assets-library://asset/asset.JPG?id=1000000007&ext=JPG" is nil 【发布时间】:2017-02-13 06:22:06 【问题描述】:我想从 iPad 的照片库中获取图像 URL。
当我试图从 Image Piicker 的信息中获取 UIImagePickerControllerReferenceURL 时 我得到的网址为:
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
如果我做错了什么,请告诉我。
【问题讨论】:
如果没有保存你还没有url。 【参考方案1】:ios8以后,你应该使用Photos.framework
访问系统照片库。
单张照片模型是一个PHAsset
实例对象。它具有pixelWidth
和pixelHeight
属性,用于存储当前照片的尺寸信息。通过这些信息,你可以计算出它的内存大小。
【讨论】:
【参考方案2】:这些函数允许您访问某些图像元数据,而无需将实际像素数据加载到内存中。例如,获取像素尺寸的工作方式如下(确保在您的目标中包含 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
【讨论】:
以上是关于照片库图像 URL “assets-library://asset/asset.JPG?id=1000000007&ext=JPG”为 nil的主要内容,如果未能解决你的问题,请参考以下文章