iOS裁剪出环形图片
EddieDurham
8年前
<p>ios 裁剪出一个圆形的头像,这样的例子在简书已经很多了,我就不详细的介绍了.今天我想讲的是怎么裁剪出一个环形的图片.废话不多说,见代码。</p> <p>1:首先将一张图片裁剪成圆形图片,,</p> <pre> <code class="language-swift">/**圆形图片裁剪*/ - (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; }</code></pre> <p>2:用CGContextClearRect 的功能 制作环形图片</p> <pre> <code class="language-swift">- (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; }</code></pre> <p>如果你的图片是正方形的话,就大功告成了,但是你的图片是长方形呢,不用怕.</p> <p>注:将长方形图片变成正方形图片:</p> <pre> <code class="language-swift">- (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; }</code></pre> <p>当然这是就用到了UIimage的size的属性了.</p> <pre> <code class="language-swift">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; }</code></pre> <p> </p> <p>来自:http://www.cocoachina.com/ios/20160831/17443.html</p> <p> </p>