ios - 如何在swift中调用这个函数

标签 ios swift uiimageview uiimage crop

我是 swift 的新手,所以我想尝试这个扩展来裁剪图像,但我不知道如何调用它 我已经尝试用这段代码调用它,但我收到了未使用的通知 如果我使用 uiimageview 设置宽度和高度,这可能吗? 感谢所有的回答真的很感激

let size = CGSize(width: 500, height: 500)
            previewKTPImage.image?.crop(to: size)


import UIKit
extension UIImage {
    func crop(to:CGSize) -> UIImage {
        guard let cgimage = self.cgImage else { return self }

        let contextImage: UIImage = UIImage(cgImage: cgimage)

        let contextSize: CGSize = contextImage.size

        //Set to square
        var posX: CGFloat = 0.0
        var posY: CGFloat = 0.0
        let cropAspect: CGFloat = to.width / to.height

        var cropWidth: CGFloat = to.width
        var cropHeight: CGFloat = to.height

        if to.width > to.height { //Landscape
            cropWidth = contextSize.width
            cropHeight = contextSize.width / cropAspect
            posY = (contextSize.height - cropHeight) / 2
        } else if to.width < to.height { //Portrait
            cropHeight = contextSize.height
            cropWidth = contextSize.height * cropAspect
            posX = (contextSize.width - cropWidth) / 2
        } else { //Square
            if contextSize.width >= contextSize.height { //Square on landscape (or square)
                cropHeight = contextSize.height
                cropWidth = contextSize.height * cropAspect
                posX = (contextSize.width - cropWidth) / 2
            }else{ //Square on portrait
                cropWidth = contextSize.width
                cropHeight = contextSize.width / cropAspect
                posY = (contextSize.height - cropHeight) / 2
            }
        }

        let rect: CGRect = CGRect(x : posX, y : posY, width : cropWidth, height : cropHeight)

        // Create bitmap image from context using the rect
        let imageRef: CGImage = contextImage.cgImage!.cropping(to: rect)!

        // Create a new image based on the imageRef and rotate back to the original orientation
        let cropped: UIImage = UIImage(cgImage: imageRef, scale: self.scale, orientation: self.imageOrientation)

        cropped.draw(in: CGRect(x : 0, y : 0, width : to.width, height : to.height))

        return cropped
    }
}

最佳答案

需要持有返回值

let result = previewKTPImage.image?.crop(to:CGSize(width: 500, height: 500))
previewKTPImage.image = result // note this will stretch it also so

如果需要配置contentMode

previewKTPImage.contentMode = .scaleAspectFit 

关于ios - 如何在swift中调用这个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52027697/

相关文章:

c# - 在 mac sierra 上捕获并更改键盘以模拟 neo2 键盘布局

xcode - 在 ImageView 中淡入淡出幻灯片。代码 4.2

ios - 我们可以在适用于 iOS 的自定义 B2B 应用程序中使用应用程序内购买或订阅吗?

ios - 解包可选值时意外发现 nil

iOS |如何以编程方式识别全景图像

ios - 将数组保存为核心数据中的数据的正确方法是什么?

swift - 使用Geofire,如何对非常规节点结构进行查询?

ios - 尾随约束缺失错误

ios - 如何用其他颜色替换 UIImage 中的颜色

iphone - UIImageView 动画不起作用