图像蒙版调整原始图像的大小(想要以蒙版图像形状蒙版和裁剪图像)

时间:2015-07-31 06:39:43

标签: ios image image-masking

我有两个图像1.原始图像2.mask图像

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

- (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;
}

但是当这种方法掩盖图像比原始图像大小调整掩模形状

我的要求是

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

之后我想要掩饰

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

enter image description here

想要从图像中仅遮盖颜色部分其他部分将是透明的,因此仅具有遮罩图像的彩色部分的公共原始图像和其他部分将不会裁剪,并且当原始图像缩放比该缩放部分将被遮盖而不是原始图像。

0 个答案:

没有答案