【问题标题】:How to get UIBezierPath of shape in UIImage or crop UIImage in a certain shape如何在 UIImage 中获取形状的 UIBezierPath 或将 UIImage 裁剪为特定形状
【发布时间】:2014-07-16 01:25:58
【问题描述】:

我是 iOS 新手,我想知道我是否可以得到 UIImageUIBezierPath。我有一个UIImage 的面部布局并想要获得UIBezierPath,这有助于我裁剪UIImage。 或者,谁能告诉我其他裁剪 UIImages 的方法?但请确保裁剪是自定义形状(例如:脸、心等),而不是矩形。

【问题讨论】:

  • 你做到了吗?我需要类似的功能,但下面的代码不起作用。

标签: ios objective-c uiimage uibezierpath


【解决方案1】:

这里是用图像掩盖图像的代码:

- (UIImage *)cerateImageFromImage:(UIImage *)image
                    withMaskImage:(UIImage *)mask {
    CGImageRef imageRef = image.CGImage;
    CGImageRef maskRef = mask.CGImage;

    CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                             CGImageGetHeight(maskRef),
                                             CGImageGetBitsPerComponent(maskRef),
                                             CGImageGetBitsPerPixel(maskRef),
                                             CGImageGetBytesPerRow(maskRef),
                                             CGImageGetDataProvider(maskRef),
                                             NULL,
                                             YES);

    CGImageRef maskedReference = CGImageCreateWithMask(imageRef, imageMask);
    CGImageRelease(imageMask);

    UIImage *maskedImage = [UIImage imageWithCGImage:maskedReference];
    CGImageRelease(maskedReference);

    return maskedImage;
}

用法:

UIImage *image = [UIImage imageNamed:@"Photo.png"];
UIImage *mask = [UIImage imageNamed:@"Mask.png"];
self.imageView.image = [self cerateImageFromImage:image
                                     withMaskImage:mask];

【讨论】:

  • 非常感谢您的快速回复,但很抱歉我无法从此代码中获得期望结果。当我创建面部布局的图像时,它给了我一个椭圆形的图像,从顶部的两侧、左侧和右侧都有一些缺失的部分。
  • 哦,所以你有一个蒙版图像并想用它来裁剪另一个图像?
  • Keenle,无法获得结果,它返回“nill”值。我已经尝试过这段代码,我不知道为什么会发生这一切。我以这种方式使用此代码: UIImage *image = [UIImage imageNamed:@"Some image from camera or person face"]; UIImage *mask = [UIImage imageNamed:@"人脸布局图片"];然后调用该方法。
  • cerateImageFromImage:withImageMask: 方法调用之前尝试放置断点并验证您传递的不是nil valies。
  • 我也尝试过这两个图像都有价值,但是当代码传递给“imageMask”时,它给出“nill”值。
猜你喜欢
  • 1970-01-01
  • 2013-07-27
  • 2011-09-25
  • 1970-01-01
  • 2017-11-10
  • 2017-06-13
  • 2019-08-08
  • 2017-05-09
  • 2012-12-21
相关资源
最近更新 更多