我有两张图片 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;
}
但是,当这种方法掩盖图像而不是原始图像时,用掩码形状调整大小
我的要求是
原始图像缩放,移动,使用手势旋转
在我想要掩蔽之后
并且在屏蔽原始图像时不调整大小如果(修改或未修改)只放置蒙版形状和其他透明部分裁剪。
只想从图像中屏蔽颜色部分,其他部分将是透明的,因此只有蒙版图像的彩色部分和其他部分的原始图像将不被裁剪,并且当原始图像缩放时,缩放后的部分将被蒙版而不是原始图像覆盖。