February
3rd,
2016
目录
UIImage的加载方式
使用类方法imageNamed:创建
使用imageNamed:初始化的时候,会先检查缓存中是否存在名为“ganggang”的照片,如不存在,图片首先会被缓存起来,然后才返回要加载的图片对象;如果存在,直接返回要加载的照片对象。
解析:
- 该方法会自动地做缓存,一般用于给控件添加素材图片,比如背景图片、placeHolder等。
- 大量使用( imageNamed: )会使得占用的内存增加,消耗内存
使用类方法imageWithContentsOfFile:创建
path是需要加载照片的路径,使用imageWithContentsOfFile:创建UIImage的时候,是直接从磁盘上加载。当收到内存警告时,UIImage对象会被释放,下一次绘图的时候,需要重新加载。 **解析:
- 该方法不会做缓存,如果该方法通过 path 能找到对应的文件名, 就返回这个文件的路径;如果找不到, 就返回nil;
- 对于大量频繁使用的图片,使用( imageWithContentsOfFile: )方法,虽然内存也会增长很快,但使用完之后就会降下来,不会持续占用大量内存,造成内存的消耗**。
使用类方法imageWithData:创建
data是照片数据,一般是请求返回的,然后通过imageWithData:创建UIImage。
使用类方法imageWithCGImage:创建
cgImage是定义在QuartzCore框架中的一个结构体指针。这个结构用来创建像素位图,可以通过操作存储的像素位来编辑图片。
使用类方法imageWithCIImage:创建
CIImage是CoreImage框架中最基本代表图像的对象,在CIImage被CIContext渲染出来之前,他是依赖于滤镜链的,滤镜是不会更改CIImage中的图像数。
图片的压缩处理
图片的压处理
对于“压”的功能,我们可以使用UIImageJPEGRepresentation或UIImagePNGRepresentation方法实现,如:
第一个参数是图片对象,第二个参数是压的系数,其值范围为0~1。
关于关于PNG和JPEG格式压缩
UIImageJPEGRepresentation
函数需要两个参数:图片的引用和压缩系数而UIImagePNGRepresentation
只需要图片引用作为参数.UIImagePNGRepresentation(UIImage \*image)
要比UIImageJPEGRepresentation(UIImage* image, 1.0)
返回的图片数据量大很多.- 如果对图片的清晰度要求不是极高,建议使用
UIImageJPEGRepresentation
,可以大幅度降低图片数据量.比如,刚才拍摄的图片,通过调用UIImageJPEGRepresentation(image, 1.0)
读取数据时,返回的数据大小为140K,但更改压缩系数为0.5再读取数据时,返回的数据大小只有11K,大大压缩了图片的数据量,而且清晰度并没有相差多少,图片的质量并没有明显的降低。因此,在读取图片数据内容时,建议优先使用UIImageJPEGRepresentation,并可根据自己的实际使用场景,设置压缩系数,进一步降低图片数据量大小。 - 提示:压缩系数不宜太低,通常是0.3~0.7,过小则可能会出现黑边等。
把图片压缩到指定大小(kb)
代码如下:
图片“缩”处理
通过[sourceImage drawInRect:CGRectMake(0, 0, targetWidth, targetHeight)]
可以进行图片“缩”的功能。如下是笔者对图片尺寸缩的api:
我们对图片只“压”而不缩,有时候是达不到我们的需求的。因此,适当地对图片“缩”一“缩“尺寸,就可以满足我们的需求。