[Xcode10 实际操作]六、媒体与动画-(1)使用图形上下文按一定比例缩放图片

本文将演示如何通过图形上下文,来实现图片缩放的功能.

在项目导航区,打开视图控制器的代码文件【ViewController.swift】

 1 import UIKit
 2 
 3 class ViewController: UIViewController {
 4 
 5     override func viewDidLoad() {
 6         super.viewDidLoad()
 7         // Do any additional setup after loading the view, typically from a nib.
 8         
 9         //从项目资源文件中读取一张图片
10         let image = UIImage(named: "Picture")
11         //调用缩放图片的方法,将图片缩放至指定尺寸
12         let scaledImage = scaleImage(image: image!, newSize: CGSize(width: 180, height: 180))
13         
14         //创建一个图像视图,并加载尺寸缩小后的图片
15         let imageView = UIImageView(image: scaledImage)
16         //接着设置图像视图的中心点坐标为(160,160)
17         imageView.center = CGPoint(x: 160, y: 160)
18         
19         //将图像视图添加到当前视图控制器的根视图
20         self.view.addSubview(imageView)
21     }
22     
23     //首先创建一个方法,传递一个图像参数,和一个缩放比例参数,
24     //实现将图像缩放至指定比例的功能
25     func scaleImage(image:UIImage, newSize:CGSize)->UIImage
26     {
27         //获得源图像的指定的尺寸属性
28         let imageSize = image.size
29         //获得源图像的宽度数值
30         let width = imageSize.width
31         //获得源图像的高度数值
32         let height = imageSize.height
33         
34         //计算图像新尺寸和旧尺寸的宽比例
35         let widthFactor = newSize.width/width
36         //计算图像新尺寸和旧尺寸的高比例
37         let heightFactor = newSize.height/height
38         //获取最小的哪个比例
39         let scaleFactor = (widthFactor < heightFactor) ? widthFactor : heightFactor
40         
41         //计算图像新的宽度
42         let scaledWidth = width * scaleFactor
43          //计算图像新的高度
44         let scaledHeight = height * scaleFactor
45         //将新的款的和高度,构建成标准的尺寸对象
46         let targetSize = CGSize(width: scaledWidth, height: scaledHeight)
47         
48         //创建绘图上下文环境
49         UIGraphicsBeginImageContext(targetSize)
50         //将图像对象,画入之前计算的新尺寸里,原点为(0,0,)
51         image.draw(in: CGRect(x: 0, y: 0, width: scaledWidth, height: scaledHeight))
52         //获取上下文的内容,将内容写入到新的图像对象
53         let newImage = UIGraphicsGetImageFromCurrentImageContext()
54         
55         //在方法的结尾,返回生成的新的图像对象
56         return newImage!
57     }
58 
59     override func didReceiveMemoryWarning() {
60         super.didReceiveMemoryWarning()
61         // Dispose of any resources that can be recreated.
62     }
63 }

猜你喜欢

转载自www.cnblogs.com/strengthen/p/10030174.html