2014-09-13 207 views
5

想象一下,我有一個UIImage。 我需要旋轉,然後在全局座標系(不是UIImage座標系)中裁剪它。所以結果圖像將被裁剪旋轉。旋轉和裁剪UIImage

我該怎麼做? CGImageCreateWithImageInRect將僅在圖像相對座標中裁剪圖像。

enter image description here

PS回答評論。你應該使用CIImage。

回答

2

也許這可以幫助

//init 
CIImage *image = [CIImage imageWithCGImage:CGImageRef]; 
//rotation 
CIImage *rotatedImage = [image imageByApplyingTransform:someTransform]; 
//crop 
CIImage *croppedImage = [rotatedImage imageByCroppingToRect:someRect]; 
+0

我剛測試過它,它的工作!我應該注意到,仿射旋轉將圍繞其左下角(CIImage座標系的零點)旋轉圖像,而不是圍繞其中心,因此在應用裁剪時應該注意座標。 – 2014-09-13 16:55:02

+0

你可以發佈代碼如何爲someRect進行計算嗎?我旋轉圖像,但我無法弄清楚如何裁剪我想要的矩形,因爲旋轉後它不在以前的相同位置。 – NFilip 2016-02-16 14:11:20

+0

不適用於我。 「imageByCroppingToRect」在應用「CGAffineTransform t = CGAffineTransformMakeRotation(度)」後爲我提供了空的圖像;「 – 2016-02-23 14:02:16

0

對於旋轉,您需要申請

CGAffineTransform transform = CGAffineTransformTranslate(self.imageView.transform,deltaX,deltaY); 
transform = CGAffineTransformRotate(transform, recognizer.rotation); 
transform = CGAffineTransformTranslate(transform, -deltaX, -deltaY); 
self.imageView.transform = transform; 

進行裁剪,簡單地改變你的ImageView的框架

要轉換本地coordinates'image,只需使用:

// converts a point in local coordinate space to window coordinates. 
[self.imageView convertPoint:localPosition toView:nil]; 

// use this method to calculate a view's origin in window space like this: 
[self.imageView convertPoint:self.imageView.frame.origin toView:nil]; 

如果您計劃將圖像編輯器集成到您的應用中,您不妨考慮使用以下第三方:https://github.com/heitorfr/ios-image-editor

+0

謝謝你的答案,但我需要轉換爲內部使用,而不是UIView的。 – 2014-09-13 12:32:24