iOS方形图片裁剪成圆形
来源:互联网 发布:千语淘客软件下载 编辑:程序博客网 时间:2024/05/16 12:43
前言
今天遇到了一个问题,产品以前设计了一个页面,里边的用户头像是圆形的。当时做的时候也没注意,谁知道圆形不是规则的圆形,而是有些地方有些小猫爪印在圆形的外面。然后就考虑怎么来实现这个需求,我这里有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 dataNSData *pngData = UIImagePNGRepresentation(img); // Result imageUIImage *pngImage = [UIImage imageWithData:pngData];
Okay,问题解决。
这里有一个使用这两个方法的小demo
以及参考资料
0 0
- iOS方形图片裁剪成圆形
- iOS-方形图片设置成圆形图片
- iOS裁剪图片成圆形
- iOS 把图片裁剪成圆形
- IOS 圆形图片(图片裁剪)
- 方形图片使用QLabel显示成圆形
- iOS - 把应用里边的头像/图片裁剪成圆形
- 方形图片转为圆形头像
- 自定义圆形方形图片边框
- iOS imageview 裁剪成圆形
- 如何将方形图片磨成圆形图片
- css圆形图片处理示例(方形图片变圆形图片)
- iOS Quartz2D - 裁剪图片为带边框的圆形图片
- ios 图片处理-专辑封面头像旋转-裁剪圆形图片
- 裁剪圆形图片
- 如何裁剪圆形图片
- gdi+ 裁剪圆形图片
- 裁剪圆形图片
- 1026: [SCOI2009]windy数
- 对Socket CAN的理解(3)——【Socket CAN发送数据流程】
- 我的架构师之路
- return返回值的作用
- 安卓自定义Dialog之BaseDialog
- iOS方形图片裁剪成圆形
- 纯CSS3实现真实翻书效果
- ThinkPHP3.2中if判断条件是两个变量
- 预处理数据的方法总结(使用sklearn-preprocessing)
- 编译qt的oracle驱动QOCI
- 各种浏览器的userAgent收集
- sql split
- 响应头信息详解
- 文章标题