Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
414 lines (326 sloc) 18.3 KB

EFQRCode 是一个轻量级的、用来生成和识别二维码的纯 Swift 库,可根据输入的水印图和图标产生艺术二维码,基于 CoreGraphicsCoreImageImageIO 进行开发。EFQRCode 为你提供了一种更好的在你的 App 中操作二维码的方式,它能够运行于 iOSmacOSwatchOStvOS 平台,并且支持通过 CocoaPodsCarthageSwift Package Manager 获取。本项目受 qrcode 启发。

English Introduction

概述

示例

应用商店

你可以点击下方的 App Store 按钮从应用商店下载示例程序,支持 iOS 和 tvOS:

你也可以点击下方的 Mac App Store 按钮下载 macOS 示例程序:

手动

  1. 利用 git clone 命令下载本仓库;
  2. 切换到仓库根目录下,执行 sh Startup.sh 命令获取所有依赖;
  3. EFQRCode.xcworkspace 工程中包含了所有的示例程序,用 Xcode 打开它,选择对应平台 target 编译即可。

或执行以下命令:

git clone git@github.com:EFPrefix/EFQRCode.git; cd EFQRCode; git submodule update --init --recursive; open 'EFQRCode.xcworkspace'

环境

版本 需求
1.x Xcode 8.0+
Swift 3.0+
iOS 8.0+ / macOS 10.11+ / tvOS 9.0+
4.x Xcode 9.0+
Swift 4.0+
iOS 8.0+ / macOS 10.11+ / tvOS 9.0+ / watchOS 2.0+
5.x Xcode 10.2+
Swift 5.0+
iOS 8.0+ / macOS 10.11+ / tvOS 9.0+ / watchOS 2.0+

安装

CocoaPods

EFQRCode 可以通过 CocoaPods 进行获取。只需要在你的 Podfile 中添加如下代码就能实现引入:

pod 'EFQRCode', '~> 5.1.0'

然后,执行如下命令即可:

$ pod install

Carthage

Carthage 是一个去中心化的依赖管理器,它为我们构建依赖并通过提供二进制 Frameworks 的方式供我们使用。

你可以通过 Homebrew 使用如下命令来安装 Carthage:

$ brew update
$ brew install carthage

通过在你的 Cartfile 添加如下语句可以将 EFQRCode 引入你的项目:

github "EFPrefix/EFQRCode" ~> 5.1.0

接下来执行 carthage update 命令生成 Framework 并且将生成的 EFQRCode.framework 拖入工程即可。

Swift Package Manager

Swift Package Manager 是一个集成在 swift 编译器中的用来进行 Swift 代码自动化发布的工具。

如果你已经建立了你的 Swift 包,将 EFQRCode 加入依赖是十分容易的,只需要将其添加到你的 Package.swift 文件的 dependencies 项中即可:

dependencies: [
    .Package(url: "https://github.com/EFPrefix/EFQRCode.git", Version(5, 1, 0))
]

快速使用

1. 导入 EFQRCode

在你需要使用的地方添加如下代码引入 EFQRCode 模块:

import EFQRCode

2. 二维码识别

获取图片中所包含的二维码,同一张图片中可能包含多个二维码,所以返回值是一个字符串数组:

if let testImage = UIImage(named: "test.png")?.toCGImage() {
    if let tryCodes = EFQRCode.recognize(image: testImage) {
        if tryCodes.count > 0 {
            print("There are \(tryCodes.count) codes in testImage.")
            for (index, code) in tryCodes.enumerated() {
                print("The content of \(index) QR Code is: \(code).")
            }
        } else {
            print("There is no QR Codes in testImage.")
        }
    } else {
        print("Recognize failed, check your input image!")
    }
}

3. 二维码生成

根据所输入参数创建各种艺术二维码图片,快速使用方式如下:

//                    content: 二维码内容
//            size (Optional): 二维码宽高
// backgroundColor (Optional): 二维码背景色
// foregroundColor (Optional): 二维码前景色
//       watermark (Optional): 水印图
if let tryImage = EFQRCode.generate(
    content: "https://github.com/EFPrefix/EFQRCode",
    watermark: UIImage(named: "WWF")?.toCGImage()
) {
    print("Create QRCode image success: \(tryImage)")
} else {
    print("Create QRCode image failed!")
}

结果:

4. 动态二维码

可通过 EFQRCode 的类方法 generateWithGIF 来创建 GIF 二维码,使用方式如下:

//                  data: 输入的 GIF 图片的数据
//             generator: 一个用来获取设置的 EFQRCodeGenerator 对象
// pathToSave (Optional): 用来存储 GIF 的路径,默认不填的话会存储在临时路径
//      delay (Optional): 输出的动态 QRCode 的帧间延时,默认不填的话从输入的 GIF 图片获取
//  loopCount (Optional): 输出的动态 QRCode 的循环次数,默认不填的话从输入的 GIF 图片获取
if let qrcodeData = EFQRCode.generateWithGIF(data: data, generator: generator) {
    print("Create QRCode image success.")
} else {
    print("Create QRCode image failed!")
}

你可以通过查看 Demo 代码的方式来获取更多信息,结果预览:

5. 接下来

查看 用户手册 了解更多细节。

您也可以查看下列非官方的使用说明:

待办

  • 支持 GIF 动图
  • 支持更多样式

备注

  1. 请选用对比度较高的前景色和背景色组合;
  2. 想要提高生成二维码的清晰度可以选择使用 magnificatio 替代 size,或适当提高它们的数值;
  3. 放大倍数过高/边长过大/二维码内容过多可能会导致生成失败;
  4. 建议对生成的二维码进行测试后投入使用,例如微信能够扫描成功并不代表支付宝也能成功扫描,请务必根据您的具体业务需要做有针对性的测试;
  5. 若有任何问题,期待得到您的反馈,IssuePull request 都是受欢迎的。

备注的备注:好用的话可以给个星星,蟹蟹,QAQ...

其它平台/语言

平台/语言 链接
Objective-C https://github.com/z624821876/YSQRCode
Java https://github.com/SumiMakito/AwesomeQRCode
JavaScript https://github.com/SumiMakito/Awesome-qr.js
Kotlin https://github.com/SumiMakito/AwesomeQRCode-Kotlin
Python https://github.com/sylnsfar/qrcode

贡献者

这个项目的存在多亏了所有贡献的人。 [Contribute]

备注:watchOS 平台的的原始二维码生成代码基于 swift_qrcodejs 实现,在此对原作者 ApolloZhu 所做的工作表示感谢。

捐赠

如果你认为这个项目给你带来了帮助,你可以给我买杯咖啡。如果你喜欢这个项目,并愿意为它的发展提供进一步的支持,你可以选择在 Open Collective 上成为 支持者赞助商

支持者

感谢所有的支持者! 🙏 [Become a backer]

赞助商

通过成为赞助商来支持这个项目,您的徽标将显示在这里并且链接到您的网站。 [Become a sponsor]

感谢您的支援,🙏

感谢

感谢 JetBrains 的 开源支持计划 对本项目的帮助。

使用 EFQRCode 的应用

联系

邮箱:eyrefree@eyrefree.org
技术交流群:769966374

协议

EFQRCode 基于 MIT 协议进行分发和使用,更多信息参见协议文件。

You can’t perform that action at this time.