1

我有两张图片 1.Original image 2.mask image

我想用蒙版图像掩盖原始图像,它将使用下面的代码完成。

- (UIImage *) maskImage:(UIImage *)originalImage : (NSString *)maskImageName
{
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    UIImage *maskImage = [UIImage imageNamed:maskImageName];
    CGImageRef maskImageRef = [maskImage CGImage];

    CGContextRef mainViewContentContext = CGBitmapContextCreate (NULL, maskImage.size.width, maskImage.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);//kCGImageAlphaPremultipliedLast
    CGColorSpaceRelease(colorSpace);
    if (mainViewContentContext == NULL)
    {
        return NULL;
    }

    CGFloat ratio = 0;
    ratio = maskImage.size.width/ originalImage.size.width;
    if(ratio * originalImage.size.height < maskImage.size.height)
    {
        ratio = maskImage.size.height/ originalImage.size.height;
    }
    CGRect rect1  = {{0, 0}, {maskImage.size.width, maskImage.size.height}};
    CGRect rect2  = {{-((originalImage.size.width*ratio)-maskImage.size.width)/2 , -((originalImage.size.height*ratio)-maskImage.size.height)/2}, {originalImage.size.width*ratio, originalImage.size.height*ratio}};

    CGContextClipToMask(mainViewContentContext, rect1, maskImageRef);//rect1
    CGContextDrawImage(mainViewContentContext, rect2, originalImage.CGImage);//rect2

    CGImageRef newImage = CGBitmapContextCreateImage(mainViewContentContext);
    CGContextRelease(mainViewContentContext);

    UIImage *theImage = [UIImage imageWithCGImage:newImage];
    CGImageRelease(newImage);
     CGImageRelease(maskImageRef);
    CGColorSpaceRelease(colorSpace);

    return theImage;
}

但是,当这种方法掩盖图像而不是原始图像时,用掩码形状调整大小

我的要求是

原始图像缩放,移动,使用手势旋转

在我想要掩蔽之后

并且在屏蔽原始图像时不调整大小如果(修改或未修改)只放置蒙版形状和其他透明部分裁剪。

在此处输入图像描述

只想从图像中屏蔽颜色部分,其他部分将是透明的,因此只有蒙版图像的彩色部分和其他部分的原始图像将不被裁剪,并且当原始图像缩放时,缩放后的部分将被蒙版而不是原始图像覆盖。

4

0 回答 0