创建UIImage的缺口(Create UIImage cutout)

2019-07-29 08:16发布

我有一个UIView含2周UIImageViews -一帧和后面帧的图片。 该帧不是一个矩形 - 它是一个不规则的形状。 用户可以操纵框架背后的画面(缩放,旋转和平移),他们正在做的时候,我想捕捉的框架内图片的缺口 - 而不是图片和框架在一起。 有没有一种方法,我可以做到这一点?

我已经成功的为以下单个图像拼合图片和框架一起,但我只想要的图片,而如果提取成功将有边界的框架的形状。

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

Answer 1:

你可以创建从框架面具,这个面具应用于目标图像基本上削减掉帧目标图像。 或者,您可以根据自己最终使用的最终图像,它可能是简单的剪辑使用框架,而你执行你的绘图上下文。

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

(裁剪的上下文中)的第二个选项是下通过夹持语境掩蔽影像 。



Answer 2:

用我这种方法..

- (UIImage*)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect
{

    UIGraphicsBeginImageContext(photo.frame.size);/// use your screen or photo frame
    [photo.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();



    CGImageRef imageRef = CGImageCreateWithImageInRect([screenshot CGImage], rect);
    UIImage *cropped = [UIImage imageWithCGImage:imageRef];

    /*    no origin .....
    UIGraphicsBeginImageContext(tempview.frame.size);
    [[self.photo layer] renderInContext:UIGraphicsGetCurrentContext()];   
    cropped= UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext(); 
    */
        return cropped;
}

希望,这帮助你.... :)



文章来源: Create UIImage cutout