当前位置: > > > Swift - 改变UIImage图片的大小尺寸,或按比例缩放

Swift - 改变UIImage图片的大小尺寸,或按比例缩放

在开发中,我们有时候需要对原始的 UIImage 进行处理,比如修改大小或者进行缩放操作。
         

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
评论3
  • 3楼
    2018-09-02 20:03
    Kimi

    航哥,謝謝你,總是在你這邊找到最簡潔又好用的代碼

    站长回复

    不客气的,也谢谢你的夸奖。

  • 2楼
    2017-02-11 15:10
    布袋

    也是看了楼主的源代码,才知道要把图片的 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!
    }

    }

    站长回复

    不客气,也谢谢你提供的代码。我后面也有计划写篇圆形图片的文章,这个刚好可以用到。

  • 1楼
    2016-09-18 22:05
    流氓饺子

    楼主辛苦了,一直都在阅读您的文章,给了我很大帮助

    站长回复

    很高兴我写的文章能帮助到你。我会持续更新下去的,欢迎常来。