IOS中获取图片大小的操作

来源:爱站网时间:2021-03-09编辑:网友分享
页面加载图片通常是使用uiimageview或uibutton才能上线,而我们要根据图片的大小进行操作,今天爱站技术频道小编给大家分享IOS中获取图片大小的操作。

页面加载图片通常是使用uiimageview或uibutton才能上线,而我们要根据图片的大小进行操作,今天爱站技术频道小编给大家分享IOS中获取图片大小的操作。

IOS 获取网络图片大小实例详解

但是对于网络图片来说,要想通过最优的方法获得尺寸就略微有点困难,大体思路就是下面这种:

如果有使用SDWebImage,则首先检查是否缓存过该图片,如果没有,先通过文件头获取图片大小(针对格式为png、gif、jpg文件获取其尺寸大小),如果获取失败,则下载完整的图片data,然后计算大小,如果有使用SDWebImage,则使用SDWebImage缓存该图片。

实例代码:

+(CGSize)downloadImageSizeWithURL:(id)imageURL

{

  NSURL* URL = nil;

  if([imageURL isKindOfClass:[NSURL class]]){

    URL = imageURL;

  }

  if([imageURL isKindOfClass:[NSString class]]){

    URL = [NSURL URLWithString:imageURL];

  }

  if(URL == nil)

    return CGSizeZero;

#ifdef dispatch_main_sync_safe

  if([[SDImageCache sharedImageCache] diskImageExistsWithKey:absoluteString])

  {

    UIImage* image = [[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:absoluteString];

    if(!image)

    {

      NSData* data = [[SDImageCache sharedImageCache] performSelector:@selector(diskImageDataBySearchingAllPathsForKey:) withObject:URL.absoluteString];

      image = [UIImage imageWithData:data];

    }

    if(image)

    {

      return image.size;

    }

  }

#endif

  NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:URL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:1];

  

  NSString* pathExtendsion = [URL.pathExtension lowercaseString];

  CGSize size = CGSizeZero;

  if ([pathExtendsion rangeOfString:@"png"].location != NSNotFound) {

    size = [self downloadPNGImageSizeWithRequest:request];

  }

  else if([pathExtendsion rangeOfString:@"gif"].location != NSNotFound)

  {

    size = [self downloadGIFImageSizeWithRequest:request];

  }

  else{

    size = [self downloadJPGImageSizeWithRequest:request];

  }

  if(CGSizeEqualToSize(CGSizeZero, size))

  {

    NSData* data = [NSData dataWithContentsOfURL:URL];

    UIImage* image = [UIImage imageWithData:data];

    if(image)

    {

      //如果未使用SDWebImage,则忽略;缓存该图片

#ifdef dispatch_main_sync_safe

      [[SDImageCache sharedImageCache] storeImage:image recalculateFromImage:YES imageData:data forKey:URL.absoluteString toDisk:YES];

#endif

      size = image.size;

    }

  }

  //过滤掉不符合大小的图片,大图太大浪费流量,用户体验不好

  if (size.height > 2048 || size.height  2048 || size.width 

以上就是爱站技术频道小编介绍的IOS中获取图片大小的操作,想要获得更多的开发技巧,可以直接来到js.aizhan.com学习。

上一篇:uiwebview无法在IOS中获取web标题的操作

下一篇:IOS开发中UIAlertView实现的自动关闭操作

您可能感兴趣的文章

相关阅读

查看更多 >