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

下面通过样例演示如果将一个图片(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)