黑基网 首页 电脑 Windows 7 查看内容

iOS裁剪出环形图片

2016-9-1 11:51| 投稿: lofor

摘要: ios 裁剪出一个圆形的头像,这样的例子在简书已经很多了,我就不详细的介绍了.今天我想讲的是怎么裁剪出一个环形的图片.废话不多说,见代码。1:首先将一张图片裁剪成圆形图片,,/**圆形图片裁剪*/ - (UIImage *)wjf_cir ...

ios 裁剪出一个圆形的头像,这样的例子在简书已经很多了,我就不详细的介绍了.今天我想讲的是怎么裁剪出一个环形的图片.废话不多说,见代码。

1:首先将一张图片裁剪成圆形图片,,

/**圆形图片裁剪*/
- (UIImage *)wjf_circleImage 
{
    //利用self生成一张圆形图片
    // 1.开启图形上下文
    UIGraphicsBeginImageContextWithOptions(self.size,NO,0);
    // 2.描述圆形路径
    UIBezierPath*path = [UIBezierPathbezierPathWithOvalInRect:CGRectMake(0,0,
    self.size.width,self.size.height)];
    // 3.设置裁剪区域
    [pathaddClip];
    // 4.画图
    [selfdrawAtPoint:CGPointZero];
    // 5.取出图片
    UIImage*image =UIGraphicsGetImageFromCurrentImageContext();
    // 6.关闭上下文
    UIGraphicsEndImageContext();
    returnimage;
}

2:用CGContextClearRect 的功能 制作环形图片

- (UIImage*)getClearRectImage:(UIImage*)image{
    UIGraphicsBeginImageContextWithOptions(image.size,NO,0.0f);
    CGContextRefctx =UIGraphicsGetCurrentContext();
    //默认绘制的内容尺寸和图片一样大,从某一点开始绘制
    [imagedrawAtPoint:CGPointZero];
    CGFloatbigRaduis = image.size.width/5;
    CGRectcirleRect =CGRectMake(image.size.width/2-bigRaduis, 
    image.size.height/2-bigRaduis, bigRaduis*2, bigRaduis*2);
    //CGContextAddArc(ctx,image.size.width/2-bigRaduis,image.size.height/2-bigRaduis, 
    bigRaduis, 0.0, 2*M_PI, 0);
    CGContextAddEllipseInRect(ctx,cirleRect);
    CGContextClip(ctx);
    CGContextClearRect(ctx,cirleRect);
    UIImage*newImage =UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    returnnewImage;
}

如果你的图片是正方形的话,就大功告成了,但是你的图片是长方形呢,不用怕.

注:将长方形图片变成正方形图片:

- (UIImage * ) getSquareImage: (UIImage

* ) image RangeCGRect: (CGRect) range

centerBool: (BOOL) centerBool {

    /*如若centerBool为Yes则是由中心点取mCGRect范围的图片*/

    floatimgWidth = image.size.width;

    floatimgHeight = image.size.height;

    floatviewWidth = range.size.width;

    floatviewHidth = range.size.height;

    CGRectrect;

    if (centerBool)

    rect = CGRectMake((imgWidth - viewWidth) / 2,

    (imgHeight - viewHidth) / 2, viewWidth, viewHidth);

    else {

        if (viewHidth

        {

            if (imgWidth <= imgHeight) {

                rect = CGRectMake(0, 0, imgWidth, imgWidth * viewHidth / viewWidth);

            } else {

                floatwidth = viewWidth * imgHeight / viewHidth;

                floatx = (imgWidth - width) / 2;

                if (x > 0) {

                    rect = CGRectMake(x, 0, width, imgHeight);

                } else {

                    rect = CGRectMake(0, 0, imgWidth, imgWidth * viewHidth / viewWidth);

                }

            }

        } else {

            if (imgWidth <= imgHeight) {

                floatheight = viewHidth * imgWidth / viewWidth;

                if (height < imgHeight) {

                    rect = CGRectMake(0, 0, imgWidth, height);

                } else

                {

                    rect = CGRectMake(0, 0, viewWidth * imgHeight / viewHidth, imgHeight);

                }

            } else

            {

                floatwidth = viewWidth * imgHeight / viewHidth;

                if (width < imgWidth)

                {

                    floatx = (imgWidth - width) / 2;

                    rect = CGRectMake(x, 0, width, imgHeight);

                } else

                {

                    rect = CGRectMake(0, 0, imgWidth, imgHeight);

                }

            }

        }

    }

    CGImageRefSquareImageRef =

    CGImageCreateWithImageInRect(image.CGImage, rect);

    CGRectSquareImageBounds = CGRectMake(0, 0, CGImageGetWidth(SquareImageRef), 
    CGImageGetHeight(SquareImageRef));

    UIGraphicsBeginImageContext(SquareImageBounds.size);

    CGContextRefcontext = UIGraphicsGetCurrentContext();

    CGContextDrawImage(context, SquareImageBounds, SquareImageRef);

    UIImage * SquareImage = [UIImageimageWithCGImage: SquareImageRef];

    UIGraphicsEndImageContext();

    returnSquareImage;

}

当然这是就用到了UIimage的size的属性了.

CGSize size = yuanlai.size;
float imageSize;
NSLog(@"size==height%f====width%f",size.height,size.width);
if(size.height>= size.width) {
    imageSize = size.width;
}else{
    imageSize = size.height;
}
小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册黑基账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!



免责声明:本文由投稿者转载自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,让我们一起为维护良好的互联网秩序而努力!联系方式见网站首页右下角。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论


新出炉

返回顶部