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有两个选项:
-
有三个图像,内部将显示的图像,将用于掩盖第一个图像,然后第三个图像是边界(这后一个图像将有一个透明的中心)的图像。 然后,您可以用第二张图片遮罩第一张图片,然后将图片覆盖在蒙版图片的上方。
但是,通过编程方式生成不规则形状的图像并不容易。 使用graphics编辑器工具(如PhotoShop或其他)可能更容易创build将用于边框的图像。
-
您可以
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需要一段时间才能习惯,但是它们对绘制平滑的曲线形状非常有用。
底线,如果边界有一些规则的形状,我可以用贝塞尔曲线生成,我更喜欢第二种方法。 如果边框是我在图像编辑工具中手动绘制的,那么我会使用第一种方法。