# EFQRCode
**Repository Path**: eyrefree/EFQRCode
## Basic Information
- **Project Name**: EFQRCode
- **Description**: EFQRCode 是一个轻量级的、用来生成和识别二维码的纯 Swift 库,可根据输入的水印图和图标产生艺术二维码,基于 CoreGraphics、CoreImage 和 ImageIO 进行开发。EFQRCode 为你提供了一种更好的在你的 App 中操作二维码的方式,它能够运行于 iOS、macOS、watchOS 和 tvOS 平台,并且支持通过 CocoaPods、Carthage 和 Swift Package Manager 获取。
- **Primary Language**: Swift
- **License**: MIT
- **Default Branch**: main
- **Homepage**: https://github.com/EFPrefix/EFQRCode
- **GVP Project**: No
## Statistics
- **Stars**: 21
- **Forks**: 6
- **Created**: 2017-04-05
- **Last Updated**: 2025-08-11
## Categories & Tags
**Categories**: barcode
**Tags**: None
## README

EFQRCode is a lightweight, pure-Swift library for generating stylized QRCode images with watermark or icon, and for recognizing QRCode from images, inspired by [qrcode](https://github.com/sylnsfar/qrcode) and [react-qrbtf](https://github.com/CPunisher/react-qrbtf). Based on `CoreGraphics`, `CoreImage`, and `ImageIO`, EFQRCode provides you a better way to handle QRCode in your app, no matter if it is on iOS, macOS, watchOS, tvOS, and/or visionOS. You can integrate EFQRCode through CocoaPods, Carthage, and/or Swift Package Manager.
## Examples
|||
:---------------------:|:---------------------:|:---------------------:|:---------------------:
|||
|||
## Demo Projects
### App Store
You can click the `App Store` button below to download demo, support iOS, tvOS and watchOS:
You can also click the `Mac App Store` button below to download demo for macOS:
### Compile Demo Manually
To run the example project manually, clone the repo, demos are in the 'Examples' folder, then open `EFQRCode.xcworkspace` with Xcode and select the target you want, run.
Or you can run the following command in terminal:
```bash
git clone git@github.com:EFPrefix/EFQRCode.git; cd EFQRCode; open 'EFQRCode.xcworkspace'
```
## Requirements
iOS 13.0+ / macOS 10.15+ / tvOS 13.0+ / watchOS 6.0+ / visionOS 1.0+
## Installation
### CocoaPods
EFQRCode is available through [CocoaPods](http://cocoapods.org). To install
it, simply add the following line to your Podfile:
```ruby
pod 'EFQRCode', '~> 7.0.3'
```
Then, run the following command:
```bash
$ pod install
```
### Carthage
[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
You can install Carthage with [Homebrew](http://brew.sh/) using the following command:
```bash
$ brew update
$ brew install carthage
```
To integrate EFQRCode into your Xcode project using Carthage, specify it in your `Cartfile`:
```ogdl
github "EFPrefix/EFQRCode" ~> 7.0.3
```
Run `carthage update` to build the framework and drag the built `EFQRCode.framework` into your Xcode project.
### Swift Package Manager
The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the Swift compiler.
Once you have your Swift package set up, adding EFQRCode as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`.
```swift
dependencies: [
.package(url: "https://github.com/EFPrefix/EFQRCode.git", .upToNextMinor(from: "7.0.3"))
]
```
## Quick Start
#### 1. Import EFQRCode
Import EFQRCode module where you want to use it:
```swift
import EFQRCode
```
#### 2. Recognition
A String Array is returned as there might be several QR Codes in a single `CGImage`:
```swift
if let testImage = UIImage(named: "test.png")?.cgImage {
let codes = EFQRCode.Recognizer(image: testImage).recognize()
if !codes.isEmpty {
print("There are \(codes.count) codes")
for (index, code) in codes.enumerated() {
print("The content of QR Code \(index) is \(code).")
}
} else {
print("There is no QR Codes in testImage.")
}
}
```
#### 3. Generation
##### 3.1 Create QR Code with static image
```swift
let generator = try? EFQRCode.Generator("https://github.com/EFPrefix/EFQRCode", style: .image(
params: .init(image: .init(image: .static(image: UIImage(named: "WWF")?.cgImage!), allowTransparent: true)))
)
if let image = try? generator?.toImage(width: 180).cgImage {
print("Create QRCode image success \(image)")
} else {
print("Create QRCode image failed!")
}
```
Result:
##### 3.2 Generation from animated images
You can create a dynamic QR code by passing in a sequence of animated images. The usage method is as follows:
```swift
let generator = try? EFQRCode.Generator("https://github.com/EFPrefix/EFQRCode", style: .image(
params: .init(image: .init(image: .animated(images: cgImages, imageDelays: cgImageDelays))))
)
if let imageData = try? generator?.toGIFData(width: 512) {
print("Create QRCode image success \(imageData)")
} else {
print("Create QRCode image failed!")
}
```
You can get more information from the demo, result will like this:
##### 3.3 Exportable types
- Static: NSImage, UIImage, PDF, PNG, JPEG
- Animated: APNG, GIF, SVG, MOV, MP4, M4V
#### 4. Next
Learn more from [DeepWiki](https://deepwiki.com/EFPrefix/EFQRCode).
## Recommendations
1. Please select a high contrast foreground and background color combinations;
2. To improve the definition of QRCode images, increase `size`;
3. Oversized generation dimensions, excessive QR code content, and overly large imported media may lead to generation failures;
4. It is recommended to test the QRCode image before put it into use;
5. Any contributing and pull requests are warmly welcome;
6. Part of the pictures in the demo project and guide come from the internet. If there is any infringement of your legitimate rights and interests, please contact us to delete.
## Contributors
## Backers
## Sponsors
- Thanks for the help from MacStadium's [Open Source Program](https://www.macstadium.com/opensource?from=EFQRCode).
- Thanks for the help from JetBrains's [Open Source Support Program](https://www.jetbrains.com/community/opensource/?from=EFQRCode).
## Contact
Twitter: [@EyreFree777](https://x.com/eyrefree777)
Weibo: [@EyreFree](https://weibo.com/eyrefree777)
Email: [eyrefree@eyrefree.org](mailto:eyrefree@eyrefree.org)
## License
EFQRCode is available under the MIT license. See the LICENSE file for more info.