Swift的UIImage裁剪,缩放等代码实现

上代码:

import Foundation
import UIKit

extension UIImage {
    func crop(_ rect: CGRect) -> UIImage? {
        var newRect = rect
        newRect.origin.x *= scale
        newRect.origin.y *= scale
        newRect.size.width *= scale
        newRect.size.height *= scale
        guard let imageRef = self.cgImage?.cropping(to: newRect) else { return nil }
        return UIImage(cgImage: imageRef, scale: scale, orientation: imageOrientation)
    }
    
    func resize(_ size: CGSize) -> UIImage? {
        UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.main.scale)
        self.draw(in: CGRect(origin: .zero, size: size))
        let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return resizedImage
    }
    
    func scaleToFitAtCenter(size: CGSize) -> UIImage? {
        let scaleW_H = size.width / size.height
        let selfScaleW_H = self.size.width / self.size.height
        
        if selfScaleW_H > scaleW_H {
            let w = self.size.height * scaleW_H
            let h = self.size.height
            let x = (self.size.width - w) / 2.0
            let y: CGFloat = 0
            return self.crop(CGRect(x: x, y: y, width: w, height: h))?.resize(size)
        } else {
            let w = self.size.width
            let h = self.size.width / scaleW_H
            let x: CGFloat = 0
            let y = (self.size.height - h) / 2.0
            return self.crop(CGRect(x: x, y: y, width: w, height: h))?.resize(size)
        }
    }
}

第三个函数 scaleToFitAtCenter 非常实用,把缩放和裁剪融为一体,AtCenter表示裁剪的部位为居中,可以自己根据需要追加裁剪部位。但是居中大多数时候是最常见的。

附:本人公众号“风海铜锣”,加公众号验证身份是开发者即可以入我的群“移动开发联盟”。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值