舍入UIImage但使圆圈外部透明

时间:2015-03-18 06:32:05

标签: ios objective-c core-graphics

目前我正在使用此代码对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剪辑成一个圆圈,但是它的外部是否透明?任何指针都会非常感激。

2 个答案:

答案 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会自动为上下文使用正确的主屏幕比例;)

编辑:刚才意识到,你的按钮可能有一个白色的背景设置,你通常在图像下看不到,但你现在做的是因为图像是透明的......