当前位置: > > > Swift - 将图片缩放至指定尺寸(自动裁掉多余部分,确保图片不变形)

Swift - 将图片缩放至指定尺寸(自动裁掉多余部分,确保图片不变形)

    有时我们需要将许多大小不一的图片缩放成统一的尺寸,但由于这些图片的原始长宽比例与目标尺寸的比例并不相同,如果直接拉伸的话就会造成图片变形。
    因此就需要让图片先保持原始比例进行缩放,然后再截取出指定部分。比如下图,缩放后会去掉图片多余的部分,只留下中间部分,从而保证图片不会发生变形。


下面通过样例演示如果将一个图片(UIImage)缩放成指定尺寸。

1,扩展 UIImage

extension UIImage {
    
    //将图片缩放成指定尺寸(多余部分自动删除)
    func scaled(to newSize: CGSize) -> UIImage {
        //计算比例
        let aspectWidth  = newSize.width/size.width
        let aspectHeight = newSize.height/size.height
        let aspectRatio = max(aspectWidth, aspectHeight)
        
        //图片绘制区域
        var scaledImageRect = CGRect.zero
        scaledImageRect.size.width  = size.width * aspectRatio
        scaledImageRect.size.height = size.height * aspectRatio
        scaledImageRect.origin.x    = (newSize.width - size.width * aspectRatio) / 2.0
        scaledImageRect.origin.y    = (newSize.height - size.height * aspectRatio) / 2.0
        
        //绘制并获取最终图片
        UIGraphicsBeginImageContext(newSize)
        draw(in: scaledImageRect)
        let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        return scaledImage!
    }
}

2,使用样例

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

//将图片转成 400 * 300 尺寸
let image2 = image.scaled(to: CGSize(width: 400, height: 300))
评论0