美文网首页iOS 开发IT梦之队
iOS根据URL获取图片尺寸

iOS根据URL获取图片尺寸

作者: sfandy | 来源:发表于2016-08-24 17:44 被阅读1946次

加载网络图片时,根据Url获取图片的尺寸进行UI布局。

   可将方法+ (CGSize)getImageSizeWithURL:(id)URL;放在UIImage的分类中。

引入系统的ImageIO.framework

/**
 *  根据图片url获取图片尺寸
 */
+ (CGSize)getImageSizeWithURL:(id)URL{
    NSURL * url = nil;
    if ([URL isKindOfClass:[NSURL class]]) {
        url = URL;
    }
    if ([URL isKindOfClass:[NSString class]]) {
        url = [NSURL URLWithString:URL];
    }
    if (!URL) {
        return CGSizeZero;
    }
    CGImageSourceRef imageSourceRef =     CGImageSourceCreateWithURL((CFURLRef)url, NULL);
    CGFloat width = 0, height = 0;
    if (imageSourceRef) {
        CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSourceRef, 0, NULL);
      if (imageProperties != NULL) {
          CFNumberRef widthNumberRef = CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth);
          if (widthNumberRef != NULL) {
              CFNumberGetValue(widthNumberRef, kCFNumberFloat64Type, &width);
          }
          CFNumberRef heightNumberRef = CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight);
          if (heightNumberRef != NULL) {
            CFNumberGetValue(heightNumberRef, kCFNumberFloat64Type, &height);
        }
        CFRelease(imageProperties);
    }
    CFRelease(imageSourceRef);
    }
    return CGSizeMake(width, height);
}

相关文章

网友评论

  • 凉秋落尘:我想知道这个方法是把图片下载下来再获取宽高,还是预加载的时候已经获取了
    sfandy:@凉秋落尘 通过url直接编码得到宽高的,还没到下载那一步。
  • c2fffd2b0090:楼主你好,这个方法好像比较耗时呀,cellForRow 一直调用,比较卡顿,怎么解决呢
  • iii余光:不过试了一下在5s包括以下的手机都会CFRelease(imageSourceRef) 在这里crash 不知道楼主有没有遇到过
    iii余光:@sfandy 777
    sfandy:@LH正能量 666
    iii余光:已解决 32位和64位的问题
  • iii余光:mark 非常感谢 试过很多方法 检测URL header信息 后缀等 根据png、gif 。jpg区分来计算 始终有图片size不对 这个方法刚好解决了
    sfandy:666

本文标题:iOS根据URL获取图片尺寸

本文链接:https://www.haomeiwen.com/subject/bzdosttx.html