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)