CGImageSourceCreateWithURL始终返回NULL

时间:2014-01-31 10:01:05

标签: objective-c nsurl cgimagesource

我需要在不加载的情况下读取图像的属性或下载它。事实上,我已经实现了一个使用CGImageSourceCreateWithUrl来完成此任务的简单方法。 我的问题是它总是返回错误,因为似乎imageSource为null。那么我能做些什么来修复呢? 在NSURL对象中,我传递的网址如下: “http://www.example.com/wp-content/uploads/image.jpg”还有用于检索手机内部图像的ALAssets库ID,如“assets-library://asset/asset.JPG?id = E5F41458-962D-47DD-B5EF-E606E2A8AC7A& ext = JPG”。 这是我的方法:

-(NSString *) getPhotoInfo:(NSString *)paths{
  NSString *xmlList = @“test”;

  NSURL * imageFileURL = [NSURL fileURLWithPath:paths];
  NSLog(@"imageFileURL %@", imageFileURL);
  CGImageSourceRef imageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)(imageFileURL), NULL);
  if (imageSource == NULL) {
    // Error loading image
    NSLog(@"Error loading image");
  }
  CGFloat width = 0.0f, height = 0.0f;
  CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);
  NSLog(@"image source %@", imageSource);

  return xmlList;
}

我已经看到这些帖子试图修复它但似乎没有任何效果:

在我的项目中,ARC已启用。

由于

2 个答案:

答案 0 :(得分:5)

如果要将字符串“http://www.example.com/wp-content/uploads/image.jpg”传递给-fileURLWithPath:它将返回nil,因为该字符串肯定不是文件路径,而是URL字符串。

想想-fileURLWithPath:只是将你传入的字符串添加到“file:// localhost /”...所以你最终会得到一个看起来像“file:// localhost / {{3”的URL。 “那不好。

如果您要传递整个URL字符串,而不仅仅是文件系统路径字符串,则需要调用[NSURL URLWithString:paths]。

答案 1 :(得分:1)

使用“assets-library://asset/asset.JPG?id ..........,试试这段代码

-(UIImage*)resizeImageToMaxSize:(CGFloat)max anImage:(UIImage*)anImage  
{

     NSData * imgData = UIImageJPEGRepresentation(anImage, 1);
 CGImageSourceRef imageSource = CGImageSourceCreateWithData((CFDataRef)imgData, NULL);
 if (!imageSource)
     return nil;

 CFDictionaryRef options = (CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys:
                                             (id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailWithTransform,
                                             (id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailFromImageIfAbsent,
                                             (id)[NSNumber numberWithFloat:max], (id)kCGImageSourceThumbnailMaxPixelSize,
                                             nil];
 CGImageRef imgRef = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, options);

 UIImage* scaled = [UIImage imageWithCGImage:imgRef];
  //these lines might be skipped for ARC enabled
 CGImageRelease(imgRef);
 CFRelease(imageSource);

 return scaled; }