我正在處理圖像,其中用戶使用UIBezierPath選擇了它的一部分。我如何刪除/清除/透明化所有不屬於該選擇範圍的內容?iOS UIImage剪輯到路徑
11
A
回答
20
通過一條路徑,它非常簡單。剛剛成立的路徑爲剪貼路徑:如果你想使用多路徑工會
- (UIImage *)maskImage:(UIImage *)originalImage toPath:(UIBezierPath *)path {
UIGraphicsBeginImageContextWithOptions(originalImage.size, NO, 0);
[path addClip];
[originalImage drawAtPoint:CGPointZero];
UIImage *maskedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return maskedImage;
}
,它很難,因爲Quartz不具有直接計算的兩條路徑工會的任何功能。一種方法是將每條路徑逐個填充到蒙版中,然後通過蒙版繪製圖像:
- (UIImage *)maskedImage
{
CGRect rect = CGRectZero;
rect.size = self.originalImage.size;
UIGraphicsBeginImageContextWithOptions(rect.size, YES, 0.0); {
[[UIColor blackColor] setFill];
UIRectFill(rect);
[[UIColor whiteColor] setFill];
for (UIBezierPath *path in self.paths)
[path fill];
}
UIImage *mask = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0); {
CGContextClipToMask(UIGraphicsGetCurrentContext(), rect, mask.CGImage);
[self.originalImage drawAtPoint:CGPointZero];
}
UIImage *maskedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return maskedImage;
}
0
我試過聯合多個路徑的代碼,它不起作用。
實際上,如果路徑的聯合不會彼此重疊,我們會將一條路徑附加到另一條路徑上並使用最終路徑裁剪。
UIGraphicsBeginImageContextWithOptions(originalImg.size, NO, 0);
[path1 appendPath:path2]; // append path2 to path1
[path1 addClip];
[originalImg drawAtPoint:CGPointZero];
result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
相關問題
- 1. 剪輯到繪製路徑
- 2. RaphaelJs剪輯路徑和剪輯衝突
- 3. 裁剪多個路徑出來的UIImage
- 4. css剪輯路徑替代
- 5. Raphaël.js中的剪輯路徑
- 6. 與剪輯路徑 - HTML
- 7. CGGradient和路徑剪輯:剪輯周圍的奇怪邊框
- 8. 剪輯的UIImage到UIBezierPath(未掩蔽)
- 9. 如何在FF和IOS中使用剪輯路徑多邊形
- 10. 剪輯石英2D中的路徑繪圖iOS
- 11. 相對單位CSS剪輯路徑?
- 12. SVG剪輯路徑不與snapsvg
- 13. CSS動畫破壞剪輯路徑
- 14. NSBezierPath:如何反轉剪輯路徑?
- 15. CSS3剪輯路徑還是別的?
- 16. iOS:圍繞繪製的路徑裁剪?
- 17. 裁剪UIImage到alpha
- 18. CSS徑向剪輯
- 19. 裁剪UIImage的一個定義的路徑內
- 20. 如何使用CSS剪輯路徑剪裁畫布?
- 21. 防止裁剪兒童的CSS剪輯路徑?
- 22. 從UIImage獲取CurrentBackgroundImage路徑
- 23. 提取UIImage與路徑
- 24. 設置剪輯UIImage的UIBezierPath的動畫
- 25. 如何獲取本地保存的UIImage路徑到UIImage?
- 26. 在Safari中加載CSS剪輯路徑失敗
- 27. 裁剪UIImage
- 28. 修剪源文件路徑
- 29. 如何修剪路徑?
- 30. 文件路徑剪短
哇。不知道這很容易。我正在尋找所有錯誤的地方。剪切限制了繪圖區域,對吧? –
呵呵,我有多個nsbezierpaths,或者如果我有一個nsbezierpath,筆劃在彼此之上,這會被搞砸。 –
對不起,這實際上不起作用。我有多個UIBezierPath,它們不一定代表剪輯需要的形狀,但是可以選擇。在多個UIBezierPaths上裁剪,有時會超過另一個,不會返回正確的圖像。 –