如何将图像拉伸成自定义形状(swift3)

在这里输入图像说明

下面的代码列表裁剪图像。 我希望图像被转换/拉伸,而不是在形状中裁剪。 所有的图像内容仍然在转换后的图像中。 它只会看起来不同。

extension UIImageView { func addMask(_ bezierPath: UIBezierPath) { let pathMask = CAShapeLayer() pathMask.path = bezierPath.cgPath layer.mask = pathMask } } let myPicture = UIImage(data: try! Data(contentsOf: URL(string:"https://scontent-iad3-1.xx.fbcdn.net/v/t31.0-8/14196150_10207770295835716_3510332720585393213_o.jpg?oh=fdb525410602f40f4735991b713e9c50&oe=596688E5")!))! let iv = UIImageView(image: myPicture) let bezierPath = UIBezierPath() bezierPath.move(to: iv.center) bezierPath.addLine(to: CGPoint(x: iv.frame.maxX, y: 0)) bezierPath.addLine(to: CGPoint(x: iv.frame.maxX, y: iv.frame.maxY)) bezierPath.addLine(to: CGPoint(x: 0, y: iv.frame.maxY)) bezierPath.addLine(to: .zero) bezierPath.close() iv.addMask(bezierPath) 

看看这个线程:

在UIView上扭曲\弯曲效果?

讨论了几种解决scheme,包括使用核心图像filter,或使用OpenGL构build自己的“网格变形”。

还有Github上Brad Larson开源框架GPUImage 。 你可能可以用这个框架构build一个filter来做你想做的事情。

当你必须显示该types的图像,你可以使用图像filter核心,或者你可以尝试图像蒙版..

图像核心filter:显示在:

https://www.appcoda.com/core-image-introduction

 https://code.tutsplus.com/tutorials/ios-sdk-apply-photo-filters-with-core-image-in-swift--cms-27142 

图像遮蔽:

https://www.innofied.com/implementing-image-masking-in-ios/

我尽我所能..提供解决scheme..这是简单的形象

在这里输入图像说明

那就是gif型图像的蒙版图像

在这里输入图像说明

代码写入

 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let image = UIImage(named: "image.gif") let maskingImage = UIImage(named: "mask-image.gif") imageView.image = maskImage(image: image!, mask: maskingImage!) } func maskImage(image:UIImage, mask:(UIImage))->UIImage{ let imageReference = image.cgImage let maskReference = mask.cgImage let imageMask = CGImage(maskWidth: maskReference!.width, height: maskReference!.height, bitsPerComponent: maskReference!.bitsPerComponent, bitsPerPixel: maskReference!.bitsPerPixel, bytesPerRow: maskReference!.bytesPerRow, provider: maskReference!.dataProvider!, decode: nil, shouldInterpolate: true) let maskedReference = imageReference!.masking(imageMask!) let maskedImage = UIImage(cgImage:maskedReference!) return maskedImage } 

最后结果 在这里输入图像说明