iOS 根据URL获取图片信息

前言

最近做项目遇到一个需求:

  1. 单张图片的情况下,根据图片实际宽高比来展示图片,而不是展示正方形.
  2. 服务器没有返回图片宽高给app端

效果图


iOS 根据URL获取图片信息_第1张图片

需求分析

很明确,需要我们自己根据URL去获取图片的相关信息

解决方案

  1. 将图片下载到本地然后获取图片的宽和高
  2. 其他获取图片信息的方案

方案优缺点

  1. 第一种方案缺点很明显,耗时并且影响性能,不推荐.(我面试过一家公司就采取的这个方案 ,加载很慢,有点得不偿失的感觉)
  2. 方案都还没呢,怎么办?

第二种方案

google 到了解决方案,使用ImageIO框架,它可以根据图片的URL地址获取到图片的相关信息

#import 

NSMutableString *imageURL = [NSMutableString stringWithFormat:@"http://upload-images.jianshu.io/upload_images/4790717-5e4bb86d1ae712e8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"];
CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)[NSURL URLWithString:imageURL], NULL);

NSDictionary* imageHeader = (__bridge NSDictionary*) CGImageSourceCopyPropertiesAtIndex(source, 0, NULL);
NSLog(@"Image header %@",imageHeader);
NSLog(@"PixelHeight %@",[imageHeader objectForKey:@"PixelHeight"]);

打印结果:

Image header {
    ColorModel = RGB;
    Depth = 8;
    HasAlpha = 1;
    PixelHeight = 1136;
    PixelWidth = 640;
    ProfileName = "sRGB IEC61966-2.1";
    "{PNG}" =     {
        Chromaticities =         (
            "0.3127",
            "0.329",
            "0.64",
            "0.33",
            "0.3",
            "0.6000000000000001",
            "0.15",
            "0.06"
        );
        Gamma = "0.45455";
        InterlaceType = 0;
    };
}

这里我们只需要获取图片的 PixelHeightPixelWidth就好了

总结

  1. 第二种方案明显比第一种效率要高,但也是从服务器获取图片信息的,并不是十分推荐采取这种方法
  2. 如果可以的话,推荐让后台返回图片的宽高吧,或者和后台沟通传图片的时候,app端在上传图片的时候,把图片的宽和高一并传上去

你可能感兴趣的:(iOS 根据URL获取图片信息)