Swift UIKit/CoreGraphics 二维码添加lo

作者: 呆头呆脑雷 | 来源:发表于2016-09-10 18:41 被阅读1579次

    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之后。正在看二维码美化,有兴趣的可以交流一下,当然小弟知识有限,还希望大家多多指教

    相关文章

      网友评论

        本文标题:Swift UIKit/CoreGraphics 二维码添加lo

        本文链接:https://www.haomeiwen.com/subject/uveyettx.html