Есть ли стандартный способ обрезать кусок изображения (UIImage) на основе заданного пути (CGPath)? (Путь - это эллипс, звезда, многоугольник ...) Мой настоящий вопрос связан с этим: AVCaptureStillImageOutput area selection , который до сих пор остается без ответа и для которого у меня все еще нет решения.Обрезание изображения с заданным путем
ответ
Используйте этот код
CGPathRef path = CGPathCreateWithEllipseInRect(CGRectMake(50.0,50.0,300.0,200.0), nil);
UIGraphicsBeginImageContext(self.view.bounds.size);
CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [UIColor blackColor].CGColor);
CGContextAddPath(UIGraphicsGetCurrentContext(), path);
CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(), [UIColor redColor].CGColor);
CGContextDrawPath(UIGraphicsGetCurrentContext(), kCGPathFillStroke);
UIImage *maskImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImage *originalImage = [UIImage imageNamed:@"image"];
UIGraphicsBeginImageContext(self.view.bounds.size);
CGContextClipToMask(UIGraphicsGetCurrentContext(), CGRectMake(0.0,0.0,300.0,200.0), maskImage.CGImage);
[captureImage drawAtPoint:CGPointZero];
UIImage *clippedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Спасибо! Я пытаюсь использовать этот хороший код, хотя некоторые проблемы. Результирующее изображение ориентировано неверно и возникают проблемы масштабирования, при этом маска сжимается. Мне пришлось исправить несколько деталей, но я думаю, что основная идея хорошая, и я хотел бы заставить ее работать. – Michel
Да, вы правы. Вы должны учитывать фактор ориентации и масштабирования. –
Да, это кажется сложнее, чем я думал. Я более или менее решил обрезающий аспект, но у меня проблемы с сохранением различных клипов как PNG-файла так, как хотелось бы. На самом деле я даже сделал специальное приложение для тестирования этой стороны, с сообщением, чтобы обратиться за помощью: http://stackoverflow.com/questions/34646982/avcapturestillimageoutput-uiimagepngпредставление – Michel
http://stackoverflow.com/q/22496029/4151918 –
или, еще лучше, http://stackoverflow.com/a/8308955/1218876 –