裁剪旋转的 UIImage

Posted

技术标签:

【中文标题】裁剪旋转的 UIImage【英文标题】:crop a rotated UIImage 【发布时间】:2013-02-03 11:37:32 【问题描述】:

我遇到了这里描述的确切问题:

crop a rotated UIImage.

我需要,但是,当我尝试解决方案时,它不会裁剪图像

UIView *rotatedViewBox = [[UIView alloc] initWithFrame:videoPreviewView.frame];
NSLog(@"frame width: %f height:%f x:%f y:%f",videoPreviewView.frame.size.width, videoPreviewView.frame.size.height,videoPreviewView.frame.origin.x,videoPreviewView.frame.origin.y);
rotatedViewBox.transform = CGAffineTransformMakeRotation(90 * M_PI / 180);
CGSize rotatedSize = rotatedViewBox.frame.size;
UIGraphicsBeginImageContext(rotatedSize);
CGContextRef bitmap = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(bitmap, rotatedSize.width / 2.0f, rotatedSize.height / 2.0f);
CGContextRotateCTM(bitmap, 90 * M_PI / 180);
CGContextScaleCTM(bitmap, 1.0f, -1.0f);
CGContextDrawImage(bitmap, CGRectMake(-videoPreviewView.frame.size.width / 2.0f,
                                             -videoPreviewView.frame.size.height / 2.0f,
                                              videoPreviewView.frame.size.width,
                                              videoPreviewView.frame.size.height),
                           image.CGImage);
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

日志是: 框架宽度:310 高度:310 x:0 y: 69

虽然旋转有效,但新图像未在旧图像的 0,69,310,310 处裁剪。

【问题讨论】:

“不起作用”什么也没告诉我们。请提供更多详细信息。 我更新了问题 - 它根本不裁剪图像。只有旋转有效 【参考方案1】:

您使用的“解决方案”虽然被接受,但也带有 OP 评论“但它不起作用。”

该解决方案仅声称处理问题的轮作部分,而不是作物。它正在做它声称要做的事情,但仅此而已。

这是一个执行裁剪的 CG 函数:

CGImageRef CGImageCreateWithImageInRect (
   CGImageRef image,
   CGRect rect
);

输入您的图像和要裁剪到的区域的矩形。

在此处查看答案以获取示例用法:Cropping an UIImage

【讨论】:

OP 在哪里说它不起作用?我怎样才能使它基于这个解决方案工作?因为 CGContextDrawImage 应该在另一个内部绘制和图像不是吗? @Odelya,对不起,我看错了 - 那是 你的 评论它不起作用!我已经更新了答案 那行不通。因为它没有考虑方向(用户在方向改变之前裁剪了图像) - 我怀疑它是否会起作用,但我现在会给它一个机会 正如我所想 - 裁剪不起作用。这就是为什么之前的 OP 发布了他的问题 - 旋转裁剪的图像 @Odelya,也许我不明白你想做什么。如果您将问题中的代码转换为“旋转”方法,将我的答案中的代码转换为“裁剪”方法,将旋转方法应用于您的输入图像,然后应用裁剪方法,您将获得旋转、裁剪的结果。这回答了你的问题,“我需要裁剪一个旋转的 UIImage”。在您的评论中,您首先谈到作物,其次是轮换。只需颠倒两种方法的顺序即可。如果这仍然不能回答您的问题,您可以更新它以更好地解释您正在尝试做什么以及什么不起作用。

以上是关于裁剪旋转的 UIImage的主要内容,如果未能解决你的问题,请参考以下文章

为啥此裁剪代码会导致图像旋转?

裁剪图像更改 iPhone 中的旋转

UIImage 在裁剪后被旋转

裁剪后 UIImage 旋转 90 度

在opencv中裁剪旋转图像

旋转图像并裁剪黑色边框