UIImage在面具周围的边界

我目前这个代码在我的图像上创build一个面具。

- (UIImage*) maskImage:(UIImage *) image withMask:(UIImage *) mask { CGImageRef imageReference = image.CGImage; CGImageRef maskReference = mask.CGImage; CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskReference), CGImageGetHeight(maskReference), CGImageGetBitsPerComponent(maskReference), CGImageGetBitsPerPixel(maskReference), CGImageGetBytesPerRow(maskReference), CGImageGetDataProvider(maskReference), NULL, // Decode is null YES // Should interpolate ); CGImageRef maskedReference = CGImageCreateWithMask(imageReference, imageMask); CGImageRelease(imageMask); UIImage *maskedImage = [UIImage imageWithCGImage:maskedReference]; CGImageRelease(maskedReference); return maskedImage; } 

我现在想要在屏蔽的输出周围添加一个2点边框(就像在源URL中一样)。 任何想法我可以做到这一点?

谢谢!

请参考下面的链接,我也想实现一样。

将边框应用于图像形状

请在下面find代码:

 - (UIImage*)mergeImage:(UIImage*)first withImage:(UIImage*)second { // get size of the second image CGImageRef secondImageRef = second.CGImage; CGFloat secondWidth = CGImageGetWidth(secondImageRef); CGFloat secondHeight = CGImageGetHeight(secondImageRef); float offsetwt,offsetht,offset; offset=20; if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { offset=offset/2; } offsetht=(secondHeight * (secondWidth+offset)) /secondWidth; offsetwt=secondWidth+offset; // build merged size CGSize mergedSize = CGSizeMake(offsetwt,offsetht); // capture image context ref UIGraphicsBeginImageContext(mergedSize); //Draw images onto the context [first drawInRect:CGRectMake(0, 0, offsetwt, offsetht)]; [second drawInRect:CGRectMake(offset/2, offset/2, secondWidth, secondHeight) blendMode:kCGBlendModeNormal alpha:1.0]; // assign context to new UIImage UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); // end context UIGraphicsEndImageContext(); return newImage; } 

其中第一个参数是用于蒙版的图像,第二个是被蒙版的图像。 您可以根据您的要求设置偏移量。 我希望这可以帮助你。

至less有两个选项:

  1. 有三个图像,内部将显示的图像,将用于掩盖第一个图像,然后第三个图像是边界(这后一个图像将有一个透明的中心)的图像。 然后,您可以用第二张图片遮罩第一张图片,然后将图片覆盖在蒙版图片的上方。

    但是,通过编程方式生成不规则形状的图像并不容易。 使用graphics编辑器工具(如PhotoShop或其他)可能更容易创build将用于边框的图像。

  2. 您可以UIBezierPath为蒙版创build一个UIBezierPath来创build两个CAShapeLayer对象,您可以使用它来掩盖图像视图以及用于添加的图像视图边界:

     UIBezierPath *path = [UIBezierPath bezierPath]; [path addArcWithCenter:CGPointMake(self.view.bounds.size.width / 2.0, self.view.bounds.size.height / 2.0) radius:self.view.bounds.size.width * 0.4 startAngle:0 endAngle:M_PI * 2.0 clockwise:YES]; CAShapeLayer *mask = [CAShapeLayer layer]; mask.path = path.CGPath; mask.fillColor = [[UIColor blackColor] CGColor]; self.imageView.layer.mask = mask; CAShapeLayer *border = [CAShapeLayer layer]; border.path = path.CGPath; border.strokeColor = [[UIColor blueColor] CGColor]; border.fillColor = [[UIColor clearColor] CGColor]; border.lineWidth = 10.0; [self.imageView.layer addSublayer:border] 

    这是一个例子,其中的path是一个简单的圆形,但你可以创build一个心形的path或任何东西。 贝塞尔path需要一段时间才能习惯,但是它们对绘制平滑的曲线形状非常有用。

底线,如果边界有一些规则的形状,我可以用贝塞尔曲线生成,我更喜欢第二种方法。 如果边框是我在图像编辑工具中手动绘制的,那么我会使用第一种方法。