小编给大家分享一下Swift如何实现缩放并填充图片功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
先看代码,然后再分析:
func rescaleAndPading(_ image: UIImage, targetSize: CGSize) -> UIImage? { let max = max(image.width, image.height) let ratio = Float(targetSize.width) / Float(max) let (newWidth, newHeight) = ( Int(Float(image.width) * ratio), Int(Float(image.height) * ratio) ) let (tarWidth, tarHeight) = ( Int(targetSize.width), Int(targetSize.height) ) let deltaW = tarWidth - newWidth let deltaH = tarHeight - newHeight let (y, x) = ( deltaH / 2, deltaW / 2 ) // 创建绘图上下文环境 UIGraphicsBeginImageContext(targetSize) let context = UIGraphicsGetCurrentContext() // 黄色背景 context?.setFillColor(UIColor.yellow.cgColor) context?.fill(CGRect(x: 0, y: 0, width: tarWidth, height: tarHeight)) image.draw(in: CGRect(x: x, y: y, width: newWidth, height: newHeight)) // 获取上下文里的内容,将视图写入到新的图像对象 let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return newImage }
看代码,总结出逻辑很简单,就是首先根据目标的 size 来计算出需要缩放的比例(按照最大边来处理),计算出图片在画布中的对应位置和缩放后的宽高。
最后就是重头戏,调用 UIGraphicsBeginImageContext 来绘画。这里要留意几个参数的设置:
UIGraphicsBeginImageContext(targetSize) 中的 targetSize 是设置画布的大小。
image.draw(in:) 是图片在画布中的 rect 。
context 是画布的对象
context?.setFillColor(_) 是设置画布的颜色,若不设置,默认为 black(黑色)
context?.fill()是设置画布填充的 rect。
以上是“Swift如何实现缩放并填充图片功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。