十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在 iOS 开发过程中,对图片的处理不仅仅局限于显示、渲染样式,还常常遇到对view指定区域截图,以及对图片的压缩、拉伸等操作。下面我们介绍一下类似的操作过程:
专注于为中小企业提供成都做网站、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业顺城免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千余家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
注:通过 UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale) 和 drawViewHierarchyInRect 的配合来截取并渲染出来的图片位置和大小,是由前者的size和后者的rect共同决定的。 即,画布相当于父view,其尺寸为size,截图绘制到画布中的位置和尺寸为rect。
想试一试的同学,可以创建一个demo,取不同的size和rect值,来观察画布和截图的位置。也可以试着将画布和截图完全吻合,即将截图完整的渲染出来,这并不难。
裁剪图片就是对当前的图片按照指定的大小范围生成一个新的图片。需要注意的是如果当前显示图片是2倍图或者3倍图,要么可能尺寸不对,要么截出来的图片很模糊,因此,需要在截图前调整rect值。
注:UIImageJPEGRepresentation 两个参数:图片引用 和压缩系数,而 UIImagePNGRepresentation 只需图片引用作为参数。在实际使用过程中,UIImagePNGRepresentation(UIImage* image) 一般要比UIImageJPEGRepresentation(UIImage* image, 1.0) 返回的图片数据量大,在处理图片时,若对图片质量要求不高,则建议使用UIImageJPEGRepresentation,根据自己的实际使用场景设置压缩系数,进一步降低图片数据量大小。
在 = iOS 5.0 时,UIImage的新方法可以处理图片的拉伸问题:
使用过程:
在 = iOS 6.0 时,UIImage的新方法可以处理图片的拉伸问题:
使用过程:
参考文章:
项目工程里面用到了图片压缩,这边做了个笔记整理了一下。
压缩:图片文件的体积变小,长宽尺寸不变,质量可能下降。
裁剪:文件尺寸变小,长宽尺寸变小,文件体积大小会变小。
在iOS中图片压缩使用到两个关键方法: UIImageJPEGRepresentation 和 UIImagePNGRepresentation 使用方式如下。
下面我们用图片测试一下两个方法的差异。就使用的本文上面的那张傍晚iPhone拍摄的图片,具体参数如图:
使用 UIImagePNGRepresentation(image) 返回的数据量大小为 1,299,138 字节(磁盘上的1.3 MB) 。
使用 UIImageJPEGRepresentation(image, 1.0) 返回的数据量大小为 183,531 字节(磁盘上的184 KB 。
可以看到 UIImagePNGRepresentation(UIImage \*image) 要比 UIImageJPEGRepresentation(UIImage* image, 1.0) 返回的图片数据量大很多。
使用 UIImageJPEGRepresentation 可以大幅度降低图片的数据量,比如刚才拍摄的那张图片,通过该方法压缩之后,数据大小仅为 184 KB 。 更改压缩系数为0.5再读取数据时,返回的数据大小只有 111 KB 。图片大小压缩了,但是清晰度并没有像差多少,质量也没有明显的降低。
所以在读取图片数据的时候,建议优先使用 UIImageJPEGRepresentation ,根据实际业务需求,设置压缩系数。
遇到的问题:
相机或相册获取图片过大在运行时内存会瞬间提高很多(60M左右,可能会更大),我的解决方案是在获取图片时对图片进行了裁剪(对图片质量要求高的不适用)
附方法:具体裁剪的大小根据自己的需求设置
可扩展的功能:(有兴趣的可以尝试一下)
1.图片放大、缩小
2.整体拖动裁剪区域
具体实现就两个步骤:
1.用系统的 Photos/Photos.h 框架异步获取到相册中的所有图片(包括原图和缩略图),然后用 collectionview 进行展示缩略图。
2.再对获取到相册图片的原图进行裁剪,分圆形裁剪和方形裁剪。裁剪框路径使用贝塞尔曲线分别设置的路径
/**
获取系统相册中所有的缩略图 和原图
缩略图 尺寸 大约 {32.5,60} (allSmallImageArray 回调获取到的缩略图 图片数组)
原图 尺寸 大约 屏幕等大 (allOriginalImageArray 回调获取到的大图 图片数组)
*/
/**
然后自定义一个照片控制器继承于 UICollectionViewController ,设置代理回调方法和初始化方法
HPPhotoPickerController.h