菜鸟教程小白 发表于 2022-12-12 17:06:38

ios - 使用蒙版裁剪图像


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

<p> <img src="/image/BOSYa.png" alt="Before cropping"/> </p>

<p> <img src="/image/Liu0n.png" alt="After cropping"/>
以下是我正在使用的代码。</p>

<pre><code>- (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 = ;
CGImageRelease(maskedReference);

return maskedImage;
}
</code></pre>

<p>谢谢..!!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><strong>另一种选择</strong></p>

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

<pre><code>- (UIImage*) maskImage1:(UIImage *) image withMask:(UIImage *) mask
{
    UIImage* maskedImage = image;

    CALayer *maskLayer = ;

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

    maskedImage.layer.mask = maskLayer;

    return maskedImage;
}
</code></pre>

<p><strong>可能是一个解决方案</strong></p>

<p>你的面具 UIImage 可能有 contentScale 错误</p>

<pre><code>mask.layer.contentScale = .scale;
</code></pre>

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

<pre><code>mask.frame = image.bounds;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用蒙版裁剪图像,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/20421323/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/20421323/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用蒙版裁剪图像