Swift - 将图片裁剪成指定的长宽比例(自动裁掉多余部分,确保图片不变形)
将图片转换成指定的长宽比例这个操作也很常见,比如:统一转成 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)