iOS中实现动态区域裁剪图片功能实例

2020-01-21 02:34:44王振洲

前言

相信大家应该都有所体会,裁剪图片功能在很多上传图片的场景里都需要用到,一方面应用服务器可能对图片的尺寸大小有限制,因而希望上传的图片都是符合规定的,另一方面,用户可能希望只上传图片中的部分内容,突出图片中关键的信息。而为了满足用户多种多样的裁剪需求,就需要裁剪图片时能支持由用户动态地改变裁剪范围、裁剪尺寸等。

动态裁剪图片的基本过程大致可以分为以下几步

显示图片与裁剪区域 支持移动和缩放图片 支持手势改变裁剪区域 进行图片裁剪并获得裁剪后的图片

显示图片与裁剪区域

显示图片

在裁剪图片之前,首先我们要在页面上显示待裁剪的图片,如下图所示

ios,裁剪屏幕指定区域,裁剪图片指定区域,图片裁剪

这一步比较简单,配置一个 UIImageView 来放置图片即可。但是要注意一点,UIImageView 有多种 contentMode,最常见有三种

UIViewContentModeScaleToFill UIViewContentModeScaleAspectFit UIViewContentModeScaleAspectFill

三者区别可以看下面的比较

UIViewContentModeScaleToFill

ios,裁剪屏幕指定区域,裁剪图片指定区域,图片裁剪

UIViewContentModeScaleAspectFit

ios,裁剪屏幕指定区域,裁剪图片指定区域,图片裁剪

UIViewContentModeScaleAspectFill

ios,裁剪屏幕指定区域,裁剪图片指定区域,图片裁剪

可以看出,ScaleToFill 会改变图片的长宽比例来铺满整个 UIImageView,ScaleAspectFill 则会保持图片比例来铺满,从而会有部分图片内容超出 UIImageView 区域的情况,而 ScaleAspectFit 则会保证图片比例不变,同时图片内容都显示在 UIImageView 中,即使无法铺满 UIImageView。

因此不同显示模式会影响到我们最终显示到屏幕上的图片的样子,而在裁剪过程中最理想的放置图片的模式则是,图片的短边刚好铺满裁剪区域的短边,而长边至少不会小于裁剪区域的长边,这就要求我们要考虑裁剪区域的长宽来放置我们的图片。

裁剪区域

接下来我们要放置我们的裁剪区域,它的样子如下所示