创建 UIImage 抠图

人气:735 发布:2022-10-16 标签: ios objective-c xcode uiview uiimageview

问题描述

我有一个 UIView 包含 2 个 UIImageViews - 一个框架和框架后面的图片.框架不是矩形 - 它是不规则的形状.用户可以操作框架后面的图片(缩放、旋转和平移),完成后,我想捕捉框架内图片的剪切 - 而不是图片和框架一起.有什么办法可以做到吗?

I have a UIView containing 2 UIImageViews - a frame and a picture behind the frame. The frame is not a rectangle - it's an irregular shape. The user can manipulate the picture behind the frame (zoom, rotate and pan) and when they're done, I want to capture the cutout of the picture within the frame - not the picture and the frame together. Is there a way I can do this?

我已经设法将图片和框架拼合为一个图像,如下所示,但我只想要图片,如果成功提取,它将具有框架形状的边框.

I've managed to flatten the picture and the frame together in to a single image as below, but I only want the picture, which if extracted successfully will have a border in the shape of the frame.

- (IBAction)renderPhoto:(id)sender {
    //Combine the layers into a single image
    UIView *canvas = [[[sender superview] subviews] objectAtIndex:0];
    UIGraphicsBeginImageContext(canvas.bounds.size);
    [canvas.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *combinedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}

推荐答案

你可以从你的框架中创建一个蒙版,并将这个蒙版应用到目标图像上,以从目标图像上切下框架.或者,根据您最终使用最终图像的方式,在执行绘图时使用框架剪辑上下文可能更简单.

You could create a mask from your frame and apply this mask to the target image to essentially cut the frame off the target image. Or, depending how you end up using the final image, it may be simpler to clip the context using the frame while you perform your drawing.

本主题涵盖了所有内容:https://developer.apple.com/library/mac/#documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_images/dq_images.html#//apple_ref/doc/uid/TP30001066-CH212-TPXREF101

This topic covers it all: https://developer.apple.com/library/mac/#documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_images/dq_images.html#//apple_ref/doc/uid/TP30001066-CH212-TPXREF101

第二个选项(剪切上下文)位于 通过剪切上下文来屏蔽图像.

The second option (clipping the context) is under Masking an Image by Clipping the Context.

275