iOS方形图片裁剪成圆形
前言
今天遇到了一个问题,产品以前设计了一个页面,里边的用户头像是圆形的。当时做的时候也没注意,谁知道圆形不是规则的圆形,而是有些地方有些小猫爪印在圆形的外面。然后就考虑怎么来实现这个需求,我这里有2种思路来处理
- 把圆形切成一个图层,然后外面的爪子也当做一个图层。也就是说这个地方,本来可以用一个UIImageView,现在要用2个。摆放位置之类的到没有什么问题,主要有2点需要考虑
- 使用SDWebImage加载的时候,使用placeholder图片,要判断
- 因为需求问题,我在别的页面,会把在这个页面获取到的用户头像数据传过去,所以,在别的页面,也要加判断,或者新建两个UIImageView.但是又由于另一个页面中的控件是在tableview上的呈现的,修改起来比较麻烦,所以放弃了这个思路。
- 另一个方式:因为美工给的图是
png
格式的,也就是说默认背景色是透明的
,所以,我们可以不修改这个页面放置的UIImageView的cornerRadius
,就默认放一个正方形的,但是想要用户的照片是圆形的。所以,我们可以把用户上传的照片修改成圆形
这就是今天的重点了。
废话不多说了。直接上代码
///把图片裁剪成圆形
//两个参数 image: 需要修改的图片
//inset: 内部偏移
-(UIImage *) circleImage:(UIImage*) image withParam:(CGFloat) inset {UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);CGContextRef context = UIGraphicsGetCurrentContext();CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);CGContextFillPath(context);CGContextSetLineWidth(context, .5);CGContextSetStrokeColorWithColor(context, [UIColor clearColor].CGColor);CGRect rect = CGRectMake(inset, inset, image.size.width - inset * 2.0f, image.size.height - inset * 2.0f);CGContextAddEllipseInRect(context, rect);CGContextClip(context);[image drawInRect:rect];CGContextAddEllipseInRect(context, rect);CGContextStrokePath(context);UIImage *newimg = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return newimg;
}
另外还有一个代码片段,是修改图片的frame的
///把图片修改成固定大小
- (UIImage *)scaleFromImage:(UIImage *)image size:(CGSize)size {UIGraphicsBeginImageContext(size);[image drawInRect:CGRectMake(0, 0, size.width, size.height)];UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return newImage;}
PS
讲一个期间遇到的问题:
刚开始我发现,切出来的图片,背景色是白色的,放在View上很影响使用。然后就开始找各种方面可能出现的问题。编程就是这样。不要怕各种问题。发现问题了,挨个排查就好了。(所以现在给我感觉,没有什么是能难倒我的,嗯!自信脸,不要打我!!)
在这里要说一下UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);
这个方法。
第一个参数,就是需要导入的图片的大小,
第二个:不透明度(YES,不透明,图片为黑色,NO,透明)
第三个参数:缩放因子,填入为0的话,图片会根据外面传入frame的大小来设定。
这里图片剪切的时候,已经为PNG了,但是运行程序之后,发现还是不行,所以咱们就接着往上排查,因为用户是拍照之后然后对照片进行编辑的,所以,我们就去看下刚拍完照的信息,结果发现,调用UIImagePickerController
之后,照片的格式是JPEG的。
这么一来,我们就找到了问题所在了,然后我就把拍照信息从JPG转换成PNG
UIImage *img = (UIImage *)info[UIImagePickerControllerOriginalImage];
// Convert it in to PNG data
NSData *pngData = UIImagePNGRepresentation(img);
// Result image
UIImage *pngImage = [UIImage imageWithData:pngData];
Okay,问题解决。
这里有一个使用这两个方法的小demo
以及参考资料
iOS方形图片裁剪成圆形相关推荐
- iOS 把图片裁剪成圆形
原图: 圆形图片裁剪效果: 裁剪成带边框的圆形图片: 核心代码: #import <UIKit/UIKit.h>@interface UIImage (image)/*** 生成一张圆形图 ...
- ios 将矩形图片裁剪成圆形图片
在ios中将一个正方形的图片裁剪成圆形的图片是一件非常容易的事情, 直接设置 imageView.layer.cornerRadius 这个属性, 再设置 imageView.clipsToBound ...
- 中如何将方形图片转换成圆形图片_【PS】PS中不可不知的实用技巧!你都掌握了吗?...
今天给大家分享一些在PS中经常用到的实用小技巧,操作简单易上手. 01 拉伸图片人物不变形 在我们在PS里想要拉伸一些图片时,里面的人物往往会跟着一起变形,那么如何改变图片比例的同时,又不影响人物的形 ...
- 如何用photoshop将方形图片处理成圆形图片
有很多朋友在使用PPT的时候都会想要将PPT中的图片素材处理成圆形,这样看起来更美观,更大方.可是,却迟迟找不到将图片处理成圆形的方法.今天小编为大家分享如何用photoshop将方形图片处理成圆形图 ...
- 如何把一个图片裁剪成圆形
1.有的时候,为了工作的需要,需要吧图片裁剪成圆形.我们一般有两种思路:让承载image的ImageView变成圆形,或者把图片变成圆形. A:通过image的mask 来操作.需要添加mask目标图 ...
- 如何将方形图片磨成圆形图片
如何将方形图片磨成圆形图片 在开发中经常会有一些需求,比如显示头像,显示一些特殊的需求,将图片显示成圆角或者圆形或者其他的一些形状.但是往往我们手上的图片或者从服务器 获取到的图片都是方形的.这时候就 ...
- QLabel将方形图片显示成圆形
想把QLabel中传入的方形图片切成原型显示,尝试用样式表写圆角能完成纯背景色切成圆形显示,但是不能将图片切成圆形. 于是上网搜寻答案,找到了解决我疑惑的帖子 https://blog.csdn.ne ...
- php 将图片截取成3张,【php】php gd库怎么把一个图片裁剪成圆形的
微信的头像现在要加水印到一张图片上 弄成 圆形的 怎么裁剪呢 Imagick提供的有 gd库 怎么做呢 因为要在微信中生成这个图片发送给用户 所以必须是生成这样的图片的 css的border-radi ...
- 【HTML5】网页实用技巧3:将方形图片设置成圆形后,添加圆形虚线边框
需要实现的效果:将原本是方形的图片,变成圆形,且添加一个圆形边框 实现思路: ①制作一个正方形div盒子,将图片放在div盒子里 ②将div盒子,设置边框样式 ③将盒子设置成圆形(利用 border- ...
- gd剪裁圆形图片 php_php gd库怎么把一个图片裁剪成圆形的
微信的头像现在要加水印到一张图片上 弄成 圆形的 怎么裁剪呢 Imagick提供的有 gd库 怎么做呢 因为要在微信中生成这个图片发送给用户 所以必须是生成这样的图片的 css的border-radi ...
最新文章
- C++_member template成员模板
- cve-2017-12617 tomcat远程代码执行漏洞复现测试
- python两数之和(hash 表)
- 亚马逊部分 AWS DNS 系统遭 DDoS 攻击,已达数小时之久
- (原)产品化:架构、过程管理
- 委派模式的定义及应用场景
- Android\OPhone动画分析之翻转效果
- jQuery的name选择器 模糊匹配
- 使用jQuery开发tab选项卡插件
- 2021牛客寒假算法基础集训营2,签到题FHIJ
- TF2.0-tf.keras.callbacks.ModelCheckpoint
- 忘记root密码,使用救援模式,grup设置密码
- Livereload介绍
- Software.Cradle.Suite.V11 X64 热流体模拟软件
- 京东价格监控软件开发技术探讨一:C#实现获取京东商品信息(价格、库存)
- PS制作微信公众号封面
- 高中时代的黑历史产物
- 计算机与打印机脱机后怎么共享,电脑重启后共享打印机脱机的解决方法
- Hankson 的趣味题
- 基于树莓派的手势识别Oled屏幕显示
热门文章
- 【高等数学】四.多元函数微分学和二重积分
- Flutter 如何实现禁止手机横屏的功能
- oracle正则表达式非数字,oracle 判断是否数字 正则表达式法
- Matlab textscan
- 北京邮电大学计算机学院合并,北京邮电大学院系重组
- sm缩写代表什么意思_狗狗各种表情都分别代表着什么意思
- 2021年,中国程序员前景一片灰暗,真的是这样吗?
- win10内置ubuntu, 启动时提示“指定的网络名不再可用”无法启动解决办法
- 关于ABAP调试中的F5,F6,F7,F8的区别和用法
- Linux curl 命令详解