Swift-技巧(一)缩放并填充图片
2021-11-02 09:00
936 查看
摘要
直接操作图片来实现它的缩放或者填充多余空间,首选
UIGraphicsBeginImageContext函数来实现,它就相当于一个画布,你甚至可以用它来涂鸦。
最近有一个需求,就是将图片先等比例缩放到指定大小,然后将空余出来空间填充为黑色,返回指定大小的图片。
这种直接操作图片的需求,就要考虑使用
UIGraphicsBeginImageContext函数实现。它可以理解为一个画布,我们只需要把图片放在画布的对应位置,把画布的多余地方全部涂成黑色就完成。
实现
先看代码,然后再分析:
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。
重点
如果是前面留意逻辑时,会发现逻辑中是先放置图片,然后填充空余空间,但是代码中是先填充全部空间,然后再放置图片,这是为什么?
经过测试后发现,后绘制的区域会覆盖掉先前已经绘制的区域,所以代码中的处理就是防止填充区域覆盖图片区域。
另外
时间仓促,说的东西可能不全面,在你实现过程中遇到什么问题,评论区给我留言,我会尽快回复。
相关文章推荐
- 如何让图片按比例响应式缩放、并自动裁剪的css技巧
- 瀑布流和图片缩放swift版
- java图片缩放实现图片填充整个屏幕
- SwiftUI图片处理(缩放、拼图)
- 如何让图片按比例响应式缩放、并自动裁剪的css技巧
- Swift中ScrollView缩放图片的代理方法
- 如何让图片按比例响应式缩放、并自动裁剪的css技巧
- Swift笔记 使用UIScrollView来居中显示图片,可缩放和跟踪触摸点
- 图片按屏幕大小缩放,不能填充整个屏幕
- 如何让图片按比例响应式缩放、并自动裁剪的css技巧
- Android实战技巧之四十七:不用预览拍照与图片缩放剪裁
- 加载到图片之后,对图片进行等比例填充缩放 分类: 图片等比缩放 加载图片后缩放 图片缩放 2014-04-22 10:41 312人阅读 评论(0) 收藏
- 如何让图片按比例响应式缩放、并自动裁剪的css技巧
- 【转载】如何让图片按比例响应式缩放、并自动裁剪的css技巧
- Swift - 改变UIImage图片的大小尺寸,或按比例缩放
- 加载到图片之后,对图片进行等比例填充缩放
- 如何让图片按比例响应式缩放、并自动裁剪的css技巧
- android图片等比例缩放 填充屏幕
- 实用技巧:js图片等比缩放
- 如何让图片按比例响应式缩放并自动裁剪的css技巧(同时也适用于一些轮播父容器响应式缩放)