2014-09-13 167 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