OStack程序员社区-中国程序员成长平台

标题: ios - 使用蒙版裁剪图像 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 17:06
标题: ios - 使用蒙版裁剪图像

我的要求是使用 maskImage 裁剪图像。 能够裁剪图像,但不能像预期的那样精确。我用谷歌搜索并尝试实现它,但不幸的是没有得到预期的结果。这是裁剪图像后得到的结果。

Before cropping

After cropping 以下是我正在使用的代码。

- (UIImage*) maskImage1UIImage *) image withMaskUIImage *) 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;
}

谢谢..!!



Best Answer-推荐答案


另一种选择

你也可以用CALayers达到同样的效果,在我看来,很清楚。

- (UIImage*) maskImage1UIImage *) image withMaskUIImage *) mask
{
    UIImage* maskedImage = image;

    CALayer *maskLayer = [CALayer layer];

    maskLayer.frame = maskedImage.bounds;
    maskLayer.contents = (__bridge id) mask.CGImage;

    maskedImage.layer.mask = maskLayer;

    return maskedImage;
}

可能是一个解决方案

你的面具 UIImage 可能有 contentScale 错误

mask.layer.contentScale = [UISCreen mainScreen].scale;

您还可以在执行 CGImageMaskCreate 之前强制设置 mask 的大小:

mask.frame = image.bounds;

关于ios - 使用蒙版裁剪图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20421323/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4