如何将图像拉伸成自定义形状 (swift3) [英] How to stretch image into custom shape (swift3)

查看:93
本文介绍了如何将图像拉伸成自定义形状 (swift3)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

扩展 UIImageView {func addMask(_ bezierPath: UIBezierPath) {让 pathMask = CAShapeLayer()pathMask.path = bezierPath.cgPathlayer.mask = pathMask}}让myPicture =的UIImage(数据:试数据(contentsOf:URL(字符串:https://scontent-iad3-1.xx.fbcdn.net/v/t31.0-8/14196150_10207770295835716_3510332720585393213_o.jpg?oh=fdb525410602f40f4735991b713e9c50&oe=596688E5")!))!让 iv = UIImageView(image: myPicture)让 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)

解决方案

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

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

<块引用>

即 gif 类型图像的蒙版图像

写代码

override func viewDidLoad() {super.viewDidLoad()//在加载视图后做任何额外的设置,通常是从笔尖.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{让 imageReference = image.cgImage让 maskReference = mask.cgImage让 imageMask = CGImage(maskWidth: maskReference!.width,高度:掩码参考!.高度,bitsPerComponent: maskReference!.bitsPerComponent,bitsPerPixel: maskReference!.bitsPerPixel,bytesPerRow: maskReference!.bytesPerRow,提供者:maskReference!.dataProvider!,解码:nil,shouldInterpolate:true)让 maskedReference = imageReference!.masking(imageMask!)让 maskedImage = UIImage(cgImage:maskedReference!)返回掩码图像}

最终结果

The code list below crops the image. I would like the image to be transformed/ stretched and not cropped in the shape. All of the image contents are still in the transformed picture. It will just look different.

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)

解决方案

when you have to display that type image you can use image filter core or you can try image masking..

Image core Filter: show in:

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

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

Image Masking:

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

i am try my best..to provide solution..that is simple image

that is mask image that is gif type image

code that write

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
}

Final Result

这篇关于如何将图像拉伸成自定义形状 (swift3)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆