如何将非均匀的UIImage扭曲成一个比例

时间:2014-08-19 11:26:09

标签: ios uiimage core-graphics

我尝试过,但无法弄清楚如何将图像调整为正确的形状。我有一个裁剪图像,我想将其转换为矩形或方形的比例,但没有找到解决方案。任何人都可以帮我这个吗?

enter image description here

进入这种形式

enter image description here

4 个答案:

答案 0 :(得分:1)

苹果内置文档没有api。我用opencv.framework找到了这种透视变换的api。 Opencv包含许多用于透视变换的api。我在c ++ api下面测试过(在imgproc.hpp中找到)并且对我来说工作正常。检查一下。

void warpPerspective( InputArray src, OutputArray dst,
                                   InputArray M, Size dsize,
                                   int flags=INTER_LINEAR,
                                   int borderMode=BORDER_CONSTANT,
                                   const Scalar& borderValue=Scalar());

这里他们还为将UIImage对象转换为InputArray(src)提供了api。这可能是一个很长的过程,让您了解这一点。

注意:您应该花一些时间来了解opencv。

答案 1 :(得分:0)

我怀疑你有可能做到,因为你必须找到原始想象的尺寸和完整xyz然后对新图像进行调整。这将使图像严重扭曲,更可能使图像无法使用。

我们尝试了类似的方法来扫描带有条形码和软件读取文档的文档,因为我们不得不放弃项目的像素失真。

答案 2 :(得分:0)

我绝对支持玛尼说的话。 OpenCV是一个很棒的地方。它也可能有助于你检测边缘。

如果你不想深入挖掘c ++土地 - AGGeometryKit是一个选项(使用开发分支)。免责声明:我是图书馆的维护者。

AGGeometryKit http://g.recordit.co/QvWdemyIM4.gif

答案 3 :(得分:0)

你可以用CGAffineTransforms做到这一点。您可以链接一系列CGAffineTransforms以获得最终形状,但该过程的技巧是旋转图像以使失真轴与x或y轴完全一致,然后使用另一个轴固定的刻度1.此代码来自一个应用程序,您可以使用两个手指扭曲并使用捏合手势进行成像:

        CGAffineTransform rotate = CGAffineTransformMakeRotation(-self.pinchAngle);
        [self.bPath applyTransform:rotate];

        CGAffineTransform scale = CGAffineTransformMakeScale(prop , 1);
        [self.bPath applyTransform:scale];


        CGAffineTransform rotate2 = CGAffineTransformMakeRotation(self.pinchAngle);
        [self.bPath applyTransform:rotate2];

其中self.pinchAngle在这里是与x轴的角度,prop是比例变化,1是没有变化。您可以使用Core Graphics处理实际的UIImage,也可以将其应用于UIImageView。如果你真的很勇敢,你可以做矩阵数学,最后得到一个变换矩阵。