目前我正在使用此代码对UIImage进行舍入:
//round the image
UIImageView *roundView = [[UIImageView alloc] initWithImage:smallImage];
UIGraphicsBeginImageContextWithOptions(roundView.bounds.size, NO, [UIScreen mainScreen].scale);
[[UIBezierPath bezierPathWithRoundedRect:roundView.bounds
cornerRadius:roundView.frame.size.width/2] addClip];
[smallImage drawInRect:roundView.bounds];
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
smallImage = finalImage;
//end round image
self.thumbnailView.image=smallImage;
UIImageWriteToSavedPhotosAlbum(smallImage, self, nil, nil); //20kb
UIGraphicsEndImageContext();
然而,这使得圆圈的外部变白,所以当我按下图像时(如果它被用作UIButton),你可以看到它是一个方形图像。无论如何将UIImage剪辑成一个圆圈,但是它的外部是否透明?任何指针都会非常感激。
答案 0 :(得分:1)
您可以设置UIImageView
的圆角半径,使其圆角如下: -
[yourImageView.layer setCornerRadius:CGRectGetWidth(yourImageView.frame)/2];
你可以增加它以使它变小。
答案 1 :(得分:0)
我不太确定为什么你有两个调用来结束你的代码段中的图像上下文,无论如何,虽然理论上上下文本身应该已经是透明的(因为你将NO传递给opaque参数),但是万一事实并非如此,在裁剪和绘制图像之前,您始终可以使用透明像素填充它
UIGraphicsBeginImageContextWithOptions(roundView.bounds.size, NO, 0.f);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor clearColor] set];
CGContextFillRect(ctx, roundView.bounds);
[[UIBezierPath bezierPathWithRoundedRect:roundView.bounds
cornerRadius:roundView.frame.size.width/2] addClip];
[smallImage drawInRect:roundView.bounds];
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
我确实在Swift游乐场试用了你的代码和添加的填充代码,它们似乎产生了类似的结果,所以我不相信这会解决你的问题,你可能没有向我们展示可以操纵上下文的代码。
PS!将0传递给scale
会自动为上下文使用正确的主屏幕比例;)
编辑:刚才意识到,你的按钮可能有一个白色的背景设置,你通常在图像下看不到,但你现在做的是因为图像是透明的......