我的要求是使用maskImage裁剪图像。 能够裁剪图像但不能达到预期的精确比例。我用谷歌搜索并试图实现它,但不幸的是没有得到预期的结果。这是裁剪图像后的结果。
以下是我正在使用的代码。
- (UIImage*) maskImage1:(UIImage *) image withMask:(UIImage *) 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;
}
谢谢.. !!
答案 0 :(得分:1)
替代
你也可以用CALayers达到同样的效果,而且我认为很清楚。
- (UIImage*) maskImage1:(UIImage *) image withMask:(UIImage *) 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.frame = image.bounds;
答案 1 :(得分:0)
也许你已经解决了这个问题,但是因为我遇到了同样的问题并且我解决了它,我将解释解决方案:掩码应用于照片的实际大小,在我的情况下它是3264x2448并且逻辑是不是iphone的屏幕尺寸,所以当在图像上应用蒙版时,它变得非常小。我解决了在Photoshop上创建一个具有3264x2448大小的图层并缩放了蒙版以保持与iphone屏幕完全相同的方式。
我遇到的另一个问题是,当我拍照时(我正在使用相机),图像得到了另一个方向,然后我不得不将遮罩转到这个photoshop图层上相同的图片方向。修改方向可以让你改变边,现在的高度是宽度,反之亦然,所以,当我不得不计算尺度时,我必须注意哪一边应该乘以得到正确的尺度。