Swift - 改变UIImage图片的大小尺寸,或按比例缩放
在开发中,我们有时候需要对原始的 UIImage 进行处理,比如修改大小或者进行缩放操作。
2,使用样例
1,扩展UIImage
这里先对 UIImage 进行扩展,增加两个方法,分别用于尺寸的重置和大小缩放。
import UIKit extension UIImage { /** * 重设图片大小 */ func reSizeImage(reSize:CGSize)->UIImage { //UIGraphicsBeginImageContext(reSize); UIGraphicsBeginImageContextWithOptions(reSize,false,UIScreen.mainScreen().scale); self.drawInRect(CGRectMake(0, 0, reSize.width, reSize.height)); let reSizeImage:UIImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return reSizeImage; } /** * 等比率缩放 */ func scaleImage(scaleSize:CGFloat)->UIImage { let reSize = CGSizeMake(self.size.width * scaleSize, self.size.height * scaleSize) return reSizeImage(reSize) } }
2,使用样例
import UIKit class ViewController: UIViewController { let image = UIImage(named:"img.jpg") @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() } //显示原始图片 @IBAction func btn1Click(sender: AnyObject) { imageView.image = image } //将图片修改成指定尺寸(160*100) @IBAction func btn2Click(sender: AnyObject) { let reSize = CGSize(width: 240, height: 150) imageView.image = image?.reSizeImage(reSize) } //将图片缩小成原来的一半 @IBAction func btn3Click(sender: AnyObject) { imageView.image = image?.scaleImage(0.5) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }源码下载:hangge_1344.zip
航哥,謝謝你,總是在你這邊找到最簡潔又好用的代碼
也是看了楼主的源代码,才知道要把图片的 contentMode设成 showImage.contentMode = .center,谢了!
顺带补充一个函数,就是图片的圆角处理,楼主可以 “Swift - 改变UIImage图片的大小尺寸,或按比例缩放+圆角”
extension UIImage {
// 创建圆角图片
///
/// - parameter radius: 圆角的半径
/// - parameter size: 图片的尺寸
/// - parameter backColor: 背景颜色 默认 white
/// - parameter lineWith: 圆角线宽 默认 1
/// - parameter lineColor: 线颜色 默认 darkGray
///
/// - returns: image
func reCornerRadiusImage(radius: CGFloat, size: CGSize, backColor: UIColor = UIColor.white, lineWith: CGFloat = 1, lineColor: UIColor = UIColor.darkGray) -> UIImage? {
let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: size)
UIGraphicsBeginImageContextWithOptions(rect.size, true, 0)
let bezier = UIBezierPath(roundedRect: rect, byRoundingCorners: UIRectCorner.allCorners, cornerRadii: CGSize(width: radius, height: radius))
backColor.setFill()
UIRectFill(rect)
bezier.addClip()
draw(in: rect)
bezier.lineWidth = 1
lineColor.setStroke()
bezier.stroke()
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
}
楼主辛苦了,一直都在阅读您的文章,给了我很大帮助