2018年12月12日更新。
最新又对Core Graphics 框架重新巩固一下,最重要一点:就是不要对底层框架盲目崇拜!愿意了解可以看看文档。它的绘制过程还是有用的!
Core Graphics框架基于Quartz高级绘图引擎。它提供低级,轻量级2D渲染,具有无与伦比的输出保真度。您可以使用此框架来处理基于路径的绘制,转换,颜色管理,屏幕外渲染,图案,渐变和阴影,图像数据管理,图像创建和图像蒙版,以及PDF文档创建,显示和解析。
修改原因,因为一个小伙伴咨询我贴图功能。寻找解决办法的时候!复习了一下。每次复习肯定都有新收获,当然需要你带着解决问题的目的去探索!
其实我们也没必要执着于CoreGraphics的使用,UIKit是在CoreGraphics上层的高级框架。我们对于这种简单的绘制。完全是UIKit几句话就能解决的。
/** 生成二维码中间添加logo
- Parameters:
- back: 二维码背景视图
- icon: 头像
*/
func createQrcode(back: UIImage, with icon: UIImage) -> UIImage {
let scale: CGFloat = 0.25 // 1/4的大小为最佳大小
let size: CGSize = back.size
let rect = CGRect.init(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(size, true, 0)
let context: CGContext = UIGraphicsGetCurrentContext()!
print(context)
back.draw(in: rect)
let iconWidth: CGFloat = size.width*scale
let iconHeight: CGFloat = size.height*scale
let offset: CGPoint = CGPoint.init(x: rect.midX-iconWidth/2.0, y: rect.midY-iconHeight/2.0)
var iconRect = rect.applying(CGAffineTransform.init(scaleX: scale, y: scale))
iconRect.origin = offset
let path = UIBezierPath.init(roundedRect: iconRect, cornerRadius: iconRect.height/10)
path.addClip()
icon.draw(in: iconRect)
UIColor.black.setStroke()
path.lineWidth = 6
path.stroke()
UIColor.init(white: 0.7, alpha: 1.0).setStroke()
path.lineWidth = 4
path.stroke()
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}
// 测试部分
let qrcodeImg = UIImage.init(named: "qrcode.png")!
let iconImg: UIImage = UIImage.init(named: "icon.png")!
let image = createQrcode(back: qrcodeImg, with: iconImg)
let view = UIImageView.init(image: image)
使用UIKit 很方便,但是可能假如你不了解CoreGraphics的绘制过程的话。那可能这代码对你有所疑惑! OC的代码不建议你看了。所以我把它删掉了。哈哈😄
'! # ps:对于Context的任何操作只对之后的操作有效。并不影响当前已经绘制的操作!'
CoreData 现在使用觉着还可以。coretext:最后我也没怎么研究他的排版功能。但是我看TextKit了,简单排版足够。
2018.12.12 结束
···
最近在做二维码的一些相关操作,在网上找了好久,也没看到什么自己满意的二维码中间填充头像的功能,想着自己最近在看coreImage,还不如自己写一个了
希望能帮助到大家解决一些图片简单处理上的一些问题
那么准备好我们要着手开始弄了:
首先看一下过程。
过程->结果那这个首先需要我们先去处理一下logo图片了
在进行操作之前我们要进行一下二维码的一小部分知识的了解:
二维码是支持容错的
二维码容错率用字母表示,容错能力等级分为:L、M、Q、H四级:
* L —— 7%
* M —— 15%
* Q —— 25%
* H —— 30%
红色区域才是二维码的数据存储区
所以二维码可以进行部分遮挡而不会影响 二维码的读取 以及读取速度
** `# 整体步骤: 1.一些必要的计算 -> 2.绘制最下层二维码 -> 3.裁切画布. -> 4.绘制logo并绘制logo边框 -> 完成
...
#看起来简单吧,绘制完成。`**
ps _2_ : 因为CGContext是mac坐标系系统,而UIKit使用的是iPhone的绘制坐标系系统。
他们的起点是不一样的,所以绘制的时候需要把绘制原点重合在一起,才能进行准确的绘制。
我相信看到这里,也许能激起大家对IOS的深入学习的兴趣,IOS开发的强大需要大家一点点去挖掘, 其他语言能做的,iOS肯定也可以做,可能还会做的更好。 让我们一起去努力…… 最近看完coreText,coreData,还有sqlite之后。正在看二维码美化,有兴趣的可以交流一下,当然小弟知识有限,还希望大家多多指教
网友评论