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

Posted

技术标签:

【中文标题】如何将图像拉伸成自定义形状(swift3)【英文标题】:How to stretch image into custom shape (swift3) 【发布时间】:2017-03-17 15:13:11 【问题描述】:

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

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)

【问题讨论】:

【参考方案1】:

看看这个帖子:

Warp \ bend effect on a UIView?

讨论了几种解决方案,包括使用核心图像过滤器,或使用 OpenGL 构建您自己的“网格扭曲”。

还有Brad Larson open source framework GPUImage on Github。您也许可以使用该框架构建一个过滤器来做您想做的事情。

【讨论】:

【参考方案2】:

当您必须显示该类型的图像时,您可以使用图像过滤器核心,或者您可以尝试图像遮罩..

图像核心过滤器:显示在:

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/

我尽我所能..提供解决方案..这是简单的图像

即掩码图片,即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

最终结果

【讨论】:

innofied.com/implementing-image-masking-in-ios 这正是我正在寻找的,但它似乎在 swift2 而不是 swift 3 中 如果您只是更改建议的编辑,如何首先输出图像视图而不是代码将起作用。

以上是关于如何将图像拉伸成自定义形状(swift3)的主要内容,如果未能解决你的问题,请参考以下文章

android将activity设置成自定义的Dialog怎么调整大小

UIBarButtonItem自定义图像被拉伸(Xcode)

java自定义鼠标形状

保存在 ImageView 中时,从自定义相机获取图像会被拉伸

如何在 JPA 中生成自定义 ID

颤振图像自定义形状