返回 导航

Swift

hangge.com

Swift - 将图片裁剪成指定的长宽比例(自动裁掉多余部分,确保图片不变形)

作者:hangge | 2018-06-06 08:10
    将图片转换成指定的长宽比例这个操作也很常见,比如:统一转成 4:3,统一转成正方形等等。当然我们不能简单地将其拉伸成指定比例,这样会造成图片变形。
    我们需要像上文介绍的图片转成指定尺寸一样(点击查看),根据比例裁剪出需要的部分(只保留中间部分,丢弃多余的部分)从而保证图片不会发生变形。


下面通过样例演示如何将一个图片(UIImage)裁剪成指定比例。

1,扩展 UIImage

extension UIImage {
    
    //将图片裁剪成指定比例(多余部分自动删除)
    func crop(ratio: CGFloat) -> UIImage {
        //计算最终尺寸
        var newSize:CGSize!
        if size.width/size.height > ratio {
            newSize = CGSize(width: size.height * ratio, height: size.height)
        }else{
            newSize = CGSize(width: size.width, height: size.width / ratio)
        }
    
        ////图片绘制区域
        var rect = CGRect.zero
        rect.size.width  = size.width
        rect.size.height = size.height
        rect.origin.x    = (newSize.width - size.width ) / 2.0
        rect.origin.y    = (newSize.height - size.height ) / 2.0
        
        //绘制并获取最终图片
        UIGraphicsBeginImageContext(newSize)
        draw(in: rect)
        let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        return scaledImage!
    }
}

2,使用样例

//原始图片
let image = UIImage(named: "image.jpg")!

//将图片转成 4:3 比例
let image2 = image.crop(ratio: 4/3)
        
//将图片转成 1:1 比例(正方形)
let image3 = image.crop(ratio: 1)
评论

全部评论(0)

回到顶部