本地获取图片的几种常用方式和网络获取图片

前言

通常,我们从本地获取图片的方式用得最多的莫过于[UIImage imageNamed:]了,方便、快速、易用,但是有着它的缺陷,那就是不宜获取太大的图片,所以,本文主要浅析一下几种常见的本地获取图片的方式,以及网络获取图片,具体如下:

正文

本地获取图片
方法1:[UIImage imageNamed:]

原理:第一次先从资源包[NSBundle mainBundle]中获取图片,取出来之后放到内存中进行缓存,下次直接从缓存中获取,而不需要再从资源包中获取。
缺陷:获取的图片不宜过大,适合加载本地占用内存较小的图片,因为图片放在应用程序包的内存中,内存空间是不会存放过大的图片的。
代码:

UIImage *image = [UIImage imageNamed:@"scenery.jpg"];

方法2:直接从资源包[NSBundle mainBundle]根据路径获取
代码:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"scenery.jpg" ofType:nil];
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];

方法3:直接从资源包[NSBundle mainBundle]根据路径获取,然后通过NSData转化获取图片
代码:

    NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"scenery.jpg" ofType:nil];
    //相对方法2,增加了这一步转化
    NSData *imageData = [NSData dataWithContentsOfFile:imagePath];
    UIImage *image = [UIImage imageWithData:imageData];

方法4:通过[NSURL fileURLWithPath:]的方式获取
代码:

    NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"scenery.jpg" ofType:nil];
    //相对方法3,增加了这一步转化
    NSURL *url = [NSURL fileURLWithPath:imagePath];
    NSData *data = [NSData dataWithContentsOfURL:url];
    UIImage *image = [UIImage imageWithData:data];

网络加载(获取)图片

代码示例:

    NSURL *url = [NSURL URLWithString:@"http://d.hiphotos.baidu.com/image/pic/item/5fdf8db1cb134954ca0604bc524e9258d0094aca.jpg"];
    NSData *data = [NSData dataWithContentsOfURL:url];
    UIImage *image = [UIImage imageWithData:data];

附加
有时候,我们想将一张图片转化成数据,这样就可以将图片数据写入、保存到相应的某个文件路径中,这时可以使用这种方法:

方法:
01:  第一个参数是所需要转化成数据的JPEG格式图片,第二个参数代表压缩值(取值范围0~1),如果想让图片不变,压缩值为1.0即可。
NSData *data = UIImageJPEGRepresentation(<#UIImage * _Nonnull image#>, <#CGFloat compressionQuality#>)
示例:
UIImage *image = [UIImage imageNamed:@"scenery.jpg"];
NSData *data = UIImageJPEGRepresentation(image, 1.0);


----------

02:PNG格式图片压缩
UIImagePNGRepresentation(<#UIImage * _Nonnull image#>)
示例:
UIImage *image = [UIImage imageNamed:@"scenery.png/jpg"];
NSData *data = UIImagePNGRepresentation(image);

本文若有疏漏之处,望留言指出,我会虚心接受大家的建议和意见,共同学习,共同进步!

你可能感兴趣的:(iOS基础)