iOS图片圆角的裁剪优化

作者: 断剑 | 来源:发表于2016-07-25 21:37 被阅读2025次

前面已经介绍过一种给UI控件设置圆角的方法了,今天给大家介绍一种性能更加优化的为图片设置圆角的方法
Xib中设置控件的圆角、边框效果
当我们在项目中显示图片的时候,如果想要将正方形的图片转换为原型图片的话,如果使用layer进行设置有时就会有一点点卡(特别是在tableView中进行显示的时候)

  • 通常的解决的办法就是通过Quartz2D将图形绘制出一张圆形图片来进行显示。

1.创建UIImage的分类实现圆角方法

#import <UIKit/UIKit.h>

@interface UIImage (ZZYCircleImage)

- (UIImage *)circleImage;

@end


#import "UIImage+ZZYCircleImage.h"

@implementation UIImage (ZZYCircleImage)

- (UIImage *)circleImage
{
    
    //1.开启图片图形上下文:注意设置透明度为非透明
    UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0);
    //2.开启图形上下文
    CGContextRef ref = UIGraphicsGetCurrentContext();
    //3.绘制圆形区域(此处根据宽度来设置)
    CGRect rect = CGRectMake(0, 0, self.size.width, self.size.width);
    CGContextAddEllipseInRect(ref, rect);
    //4.裁剪绘图区域
    CGContextClip(ref);
    
    //5.绘制图片
    [self drawInRect:rect];
    
    //6.获取图片
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
    //7.关闭图形上下文
    UIGraphicsEndImageContext();
    
    return image;
}

@end

2.扩展——SDWebImage的简单封装

#import <UIKit/UIKit.h>

@interface UIImageView (ZZYImageView)

- (void)setCircleImage:(NSString *)imageUrl withPlaceholderImage:(NSString *)placeholderImageName;

@end

#import "UIImageView+ZZYImageView.h"
#import <UIImageView+WebCache.h>
#import "UIImage+ZZYCircleImage.h"

@implementation UIImageView (ZZYImageView)

- (void)setCircleImage:(NSString *)imageUrl withPlaceholderImage:(NSString *)placeholderImageName
{
    UIImage * placeholderImage = [UIImage imageNamed:placeholderImageName];
    [self sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:placeholderImage completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        self.image = image ? [image circleImage]:[placeholderImage circleImage];
    }];
}



@end

相关文章

  • [iOS] 图像处理:一种高效裁剪图片圆角的算法

    [iOS] 图像处理:一种高效裁剪图片圆角的算法 [iOS] 图像处理:一种高效裁剪图片圆角的算法

  • iOS图片圆角的裁剪优化

    前面已经介绍过一种给UI控件设置圆角的方法了,今天给大家介绍一种性能更加优化的为图片设置圆角的方法Xib中设置控件...

  • 2018-07-04

    后台绘制圆角图片 参考链接链接 iOS 离屏渲染优化(Offscreen Render)

  • iOS~图片裁剪圆角矩形

    写了一个将矩形图片裁剪为圆角矩形的UIImage分类,可以避免大量的使用masksToBounds从而产生离屏渲染...

  • iOS图片圆角优化

    转载请注明出处:http://www.olinone.com/ Hi,又到了更新博客的时间,很高兴再次与大家见面。...

  • iOS高效图片圆角裁剪方法

    自定义裁剪算法 其它方法 核心方法 判断点 (px, py) 在不在圆心 (cx, cy) 半径 r 的圆内

  • iOS 圆角优化

    iOS 圆角优化 方法3: 覆盖一个圆形镂空图片。详细介绍第三种:在需要显示圆角的图层上覆盖一个镂空的图片,根据颜...

  • 通过CALayer和图片裁剪设置圆角

    图片裁剪设置圆角: 1、通过设置和图片同样大小的上下文2、设置圆形裁剪区域(创建圆形路径、把路径设置为裁剪区域ad...

  • iOS图片圆角优化(一)

    关于图片圆角的,用到了大量圆角图片。然而,系统圆角会导致离屏渲染的问题,出于性能考虑,于是有了图片圆角渲染工具HJ...

  • iOS图片圆角优化(二)

    //画一个圆角矩形//简单的说就是8个点,分别是第边的中点(不局限于中点,只要比半径大就好)加各顶点就好,后面10...

网友评论

  • cba8dfa3f0f4:博主,棒棒
  • 3165f8525585:这个实现在imageView比较少的情况下是没什么问题的,但你的图片绘制是在主线程里进行的,在tableView中滑动的时候会卡顿,上下不停滑动的话同一张图片会重复绘制。最好的方法还是自己写缓存,在后台线程画好后缓存到内存里,第二次显示直接从内存拿。
    3165f8525585:@Mr大喵喵 参考SDWebImage的实现。
    Mr大喵喵:@Jeff_Wong 请问下你在tableView 中绘制图片的代码可以分享一下么,绘制是在cell 里面执行操作么,是分线程设置然后回到主线程执行
    断剑: @Jeff_Wong 嗯,谢谢你
  • 奉灬孝:能写个demo展示下吗?刚用你的方法试了一下,报错了, <Error>: CGContextAddEllipseInRect: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
    <Error>: clip: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
    奉灬孝:@断剑 嗯,给张具体的图片就OK了
    断剑:你看看是不是上下文那里获取、设置出问题了啊
    iManuQiao:@奉灬孝 看上去UIGraphicsGetCurrentContext()那行没有获得正确的context地址

本文标题:iOS图片圆角的裁剪优化

本文链接:https://www.haomeiwen.com/subject/jotyjttx.html