<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Cheat Sheet</title><link>https://sourceforge.net/p/efqrcode/wiki/Cheat%2520Sheet/</link><description>Recent changes to Cheat Sheet</description><atom:link href="https://sourceforge.net/p/efqrcode/wiki/Cheat%20Sheet/feed" rel="self"/><language>en</language><lastBuildDate>Mon, 07 Jun 2021 13:37:50 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/efqrcode/wiki/Cheat%20Sheet/feed" rel="self" type="application/rss+xml"/><item><title>Cheat Sheet modified by EyreFree</title><link>https://sourceforge.net/p/efqrcode/wiki/Cheat%2520Sheet/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v4
+++ v5
@@ -9,62 +9,62 @@

 #### 2. Recognition

-Get QR Codes from CGImage, maybe there are several codes in a image, so it will return an array:
+A String Array is returned as there might be several QR Codes in a single `CGImage`:

     :::swift
-    if let testImage = UIImage(named: "test.png")?.toCGImage() {
-        if let tryCodes = EFQRCode.recognize(image: testImage) {
-            if tryCodes.count &amp;gt; 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.")
+    if let testImage = UIImage(named: "test.png")?.cgImage {
+        let codes = EFQRCode.recognize(testImage)
+        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("Recognize failed, check your input image!")
+            print("There is no QR Codes in testImage.")
         }
     }

 #### 3. Generation

-Create QR Code image, quick usage:
+Create QR Code image, basic usage:
+
+|Parameter|Description|
+|-:|:-|
+|`content`|***REQUIRED***, content of QR Code|
+|`size`|Width and height of image|
+|`backgroundColor`|Background color of QRCode|
+|`foregroundColor`|Foreground color of QRCode|
+|`watermark`|Background image of QRCode|

     :::swift
-    //                    content: Content of QR Code
-    //            size (Optional): Width and height of image
-    // backgroundColor (Optional): Background color of QRCode
-    // foregroundColor (Optional): Foreground color of QRCode
-    //       watermark (Optional): Background image of QRCode
-
-    :::swift
-    if let tryImage = EFQRCode.generate(
-        content: "https://github.com/EyreFree/EFQRCode",
-        watermark: UIImage(named: "WWF")?.toCGImage()
+    if let image = EFQRCode.generate(
+        for: "https://github.com/EFPrefix/EFQRCode",
+        watermark: UIImage(named: "WWF")?.cgImage
     ) {
-        print("Create QRCode image success: \(tryImage)")
+        print("Create QRCode image success \(image)")
     } else {
         print("Create QRCode image failed!")
     }

 Result: 

-&lt;img rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/sample1.jpg" width="36%"/&gt;
+&lt;img rel="nofollow" src="https://raw.githubusercontent.com/EFPrefix/EFQRCode/assets/sample1.jpg" width="36%"/&gt;

 #### 4. Generation from GIF

-You can create GIF QRCode with function `generateWithGIF` of class `EFQRCode`, for example:
+Use `EFQRCode.generateGIF` to create GIF QRCode.
+
+|Parameter|Description|
+|-:|:-|
+|`generator`|***REQUIRED***, an `EFQRCodeGenerator` instance with other settings|
+|`data`|***REQUIRED***, encoded input GIF|
+|`delay`|Output QRCode GIF delay, emitted means no change|
+|`loopCount`|Times looped in GIF, emitted means no change|

     :::swift
-    //                  data: Data of input GIF
-    //             generator: An object of EFQRCodeGenerator, use for setting
-    // pathToSave (Optional): Path to save the output GIF, default is temp path
-    //      delay (Optional): Output QRCode GIF delay, default is same as input GIF
-    //  loopCount (Optional): Output QRCode GIF loopCount, default is same as input GIF
-
-    :::swift
-    if let qrcodeData = EFQRCode.generateWithGIF(data: data, generator: generator) {
+    if let qrCodeData = EFQRCode.generateGIF(
+        using: generator, withWatermarkGIF: data
+    ) {
         print("Create QRCode image success.")
     } else {
         print("Create QRCode image failed!")
@@ -72,281 +72,8 @@

 You can get more information from the demo, result will like this:

-&lt;img rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/QRCodeGIF6.gif" width="42%"/&gt;
+&lt;img rel="nofollow" src="https://raw.githubusercontent.com/EFPrefix/EFQRCode/assets/QRCodeGIF6.gif" width="36%"/&gt;

-## User Guide
+#### 5. Next

-### 1. Recognition
-
-    :::swift
-    EFQRCode.recognize(image: CGImage)
-
-Or
-
-    :::swift
-    EFQRCodeRecognizer(image: CGImage).recognize()
-
-Two way before is exactly the same, because of the possibility of more than one two-dimensional code in the same iamge, so the return value is `[String]? ', if the return is nil means that the input data is incorrect or null. If the return array is empty, it means we can not recognize  any two-dimensional code at the image.
-
-### 2. Generation
-
-    :::swift
-    EFQRCode.generate(
-        content: String,
-        size: EFIntSize,
-        backgroundColor: CIColor,
-        foregroundColor: CIColor,
-        watermark: CGImage?
-    )
-
-Or
-
-    :::swift
-    let generator = EFQRCodeGenerator(content: String, size: EFIntSize)
-    generator.setContent(content: String)
-    generator.setMode(mode: EFQRCodeMode)
-    generator.setInputCorrectionLevel(inputCorrectionLevel: EFInputCorrectionLevel)
-    generator.setSize(size: EFIntSize)
-    generator.setMagnification(magnification: EFIntSize?)
-    generator.setColors(backgroundColor: CIColor, foregroundColor: CIColor)
-    generator.setIcon(icon: CGImage?, size: EFIntSize?)
-    generator.setWatermark(watermark: CGImage?, mode: EFWatermarkMode)
-    generator.setForegroundPointOffset(foregroundPointOffset: CGFloat)
-    generator.setAllowTransparent(allowTransparent: Bool)
-    generator.setPointShape(pointShape: EFPointShape)
-    generator.setBinarizationThreshold(binarizationThreshold: CGFloat)
-    
-    // Final two-dimensional code image we get
-    generator.generate()
-
-Two way before is exactly the same, the return value is `CGImage?`, if the return is nil means that there is some wrong during the generation.
-
-#### Parameters Explaination
-
-* **content: String?**
-
-Content, compulsive, capacity is limited, 1273 character most, the density of the two-dimensional lattice increases with the increase of the content. Comparison of different capacity is as follows:
-
-10 characters | 250 characters
-:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareContent1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareContent2.jpg)
-
-* **mode: EFQRCodeMode**
-
-Mode of QR Code, the definition of EFQRCodeMode:
-
-    :::swift
-    public enum EFQRCodeMode: Int {
-        case none           = 0;
-        case grayscale      = 1;
-        case binarization   = 2;
-    }
-
-none | grayscale | binarization
-:-------------------------:|:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/mode1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/mode2.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/mode3.jpg)
-
-* **inputCorrectionLevel: EFInputCorrectionLevel**
-
-Error-tolerant rate, optional, 4 different level, L: 7% / M 15% / Q 25% / H 30%, default is H, the definition of EFInputCorrectionLevel:
-
-    :::swift
-    // EFInputCorrectionLevel
-    public enum EFInputCorrectionLevel: Int {
-        case l = 0;     // L 7%
-        case m = 1;     // M 15%
-        case q = 2;     // Q 25%
-        case h = 3;     // H 30%
-    }
-
-Comparison of different inputCorrectionLevel:
-
-L | M | Q | H
-:-------------------------:|:-------------------------:|:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel2.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel3.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel4.jpg)
-
-* **size: EFIntSize**
-
-Two-dimensional code length, optional, default is 256 (PS: if magnification is not nil, size will be ignored), the definition of EFIntSize:
-
-    :::swift
-    public class EFIntSize {
-        public private(set) var width: Int = 0
-        public private(set) var height: Int = 0
-    
-        public init(width: Int, height: Int) {
-            self.width = width
-            self.height = height
-        }
-    
-        public func toCGSize() -&amp;gt; CGSize {
-            return CGSize(width: self.width, height: self.height)
-        }
-    
-        public func widthCGFloat() -&amp;gt; CGFloat {
-            return CGFloat(width)
-        }
-    
-        public func heightCGFloat() -&amp;gt; CGFloat {
-            return CGFloat(height)
-        }
-    }
-
-234*234 | 312*234
-:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/size1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/size2.jpg)
-
-* **magnification: EFIntSize?**
-
-Magnification, optional, default is nil.
-
-Because by the existence of size scaling two-dimensional code clarity is not high, if you want to get a more clear two-dimensional code, you can use magnification to set the size of the final generation of two-dimensional code. Here is the smallest ratio relative to the two-dimensional code matrix is concerned, if there is a wanted size but I hope to have a clear and size and have size approximation of the two-dimensional code by using magnification, through `maxMagnificationLessThanOrEqualTo (size: CGFloat), and `minMagnificationGreaterThanOrEqualTo (size: CGFloat), want to get magnification these two functions the specific value, the use of specific methods are as follows:
-
-    :::swift
-    let generator = EFQRCodeGenerator(
-        content: String,
-        inputCorrectionLevel: EFInputCorrectionLevel,
-        size: EFIntSize,
-        magnification: EFIntSize?,
-        backgroundColor: CIColor,
-        foregroundColor: CIColor
-    )
-    
-    // Want to get max magnification when size is less than or equalTo 600
-    if let magnification = generator.maxMagnificationLessThanOrEqualTo(size: 600) {
-        generator.magnification = EFIntSize(width: magnification, height: magnification)
-    }
-    
-    // Or
-    
-    // Want to get min magnification when width is greater than or equalTo 600 and height is greater than or equalTo 800
-    // if let magnificationWidth = generator.minMagnificationGreaterThanOrEqualTo(size: 600),
-    //     let magnificationHeight = generator.minMagnificationGreaterThanOrEqualTo(size: 600) {
-    //     generator.magnification = EFIntSize(width: magnificationWidth, height: magnificationHeight)
-    // }
-    
-    // Final two-dimensional code image
-    generator.image
-
-size 300 | magnification 9
-:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareMagnification1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareMagnification2.jpg)
-
-* **backgroundColor: CIColor**
-
-BackgroundColor, optional, default is white.
-
-* **foregroundColor: CIColor**
-
-ForegroundColor, optional, color of code point, default is black.
-
-  ForegroundColor set to red | BackgroundColor set to gray  
-:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareForegroundcolor.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareBackgroundcolor.jpg)
-
-* **icon: CGImage?**
-
-Icon image in the center of code image, optional, default is nil.
-
-* **iconSize: CGFloat?**
-
-Size of icon image, optional, default is 20% of size: 
-
-  Default 20% size | Set to 64  
-:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareIcon.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareIconSize.jpg)
-
-* **watermark: CGImage?**
-
-Watermark image, optional, default is nil, for example: 
-
-  1 | 2  
-:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareWatermark1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareWatermark2.jpg)
-
-* **watermarkMode: EFWatermarkMode**
-
-The watermark placed in two-dimensional code position, optional, default is scaleAspectFill, refer to UIViewContentMode, you can treat the two-dimensional code as UIImageView, the definition of UIViewContentMode:
-
-    :::swift
-    // Like UIViewContentMode
-    public enum EFWatermarkMode: Int {
-        case scaleToFill        = 0;
-        case scaleAspectFit     = 1;
-        case scaleAspectFill    = 2;
-        case center             = 3;
-        case top                = 4;
-        case bottom             = 5;
-        case left               = 6;
-        case right              = 7;
-        case topLeft            = 8;
-        case topRight           = 9;
-        case bottomLeft         = 10;
-        case bottomRight        = 11;
-    }
-
-* **foregroundPointOffset: CGFloat**
-
-Foreground point offset, optional, default is 0, is not recommended to use, may make the two-dimensional code broken:
-
-0 | 0.5 
-:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareForegroundPointOffset1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareForegroundPointOffset2.jpg)
-
-* **allowTransparent: Bool**
-
-Allow watermark image transparent, optional, default is `true`:
-
-true | false
-:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareAllowTransparent1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareAllowTransparent2.jpg)
-
-* **pointShape: EFPointShape**
-
-Shape of foreground point, default is `.square`, the definition of UIViewContentMode:
-
-    :::swift
-    public enum EFPointShape: Int {
-        case square         = 0;
-        case circle         = 1;
-    }
-
-square | circle
-:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareAllowTransparent1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/pointShape.jpg)
-
-* **binarizationThreshold: CGFloat**
-
-Threshold for binarization (Only for mode binarization).
-
-Origin | 0.3 | 0.5 | 0.8
-:-------------------------:|:-------------------------:|:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/binarizationThreshold0.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/binarizationThreshold1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/binarizationThreshold2.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/binarizationThreshold3.jpg)
-
-### 3. Generation from GIF
-
-1. First you should get the complete data of a GIF file, type is `Data`, can not get from `UIImage` or you will only get the first frame;
-2. Then you can create GIF QRCode with function `generateWithGIF` of class `EFQRCode`, for example:
-
-    :::swift
-    //                  data: Data of input GIF
-    //             generator: An object of EFQRCodeGenerator, use for setting
-    // pathToSave (Optional): Path to save the output GIF, default is temp path
-    //      delay (Optional): Output QRCode GIF delay, default is same as input GIF
-    //  loopCount (Optional): Output QRCode GIF loopCount, default is same as input GIF
-
-The `generator` here is an object of class `EFQRCodeGenerator`, to process each frame in GIF, you can find the use of it above.
-
-    :::swift
-    if let qrcodeData = EFQRCode.generateWithGIF(data: data, generator: generator) {
-        print("Create QRCode image success.")
-    } else {
-        print("Create QRCode image failed!")
-    }
-
-You can get more information from the demo, result will like this:
-
-&lt;img rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/QRCodeGIF6.gif" width="42%"/&gt;
-
-3. Now you can get the complete data of output QRCode GIF, next we can save it to local path / system photo library / upload to server or some other things you want to do;
-4. Emmmmmm, note that the `tempResultPath` of `EFQRcode` is the path of data of GIF of last generation.
+Learn more about advanced customizations from the [User Guide](https://github.com/EFPrefix/EFQRCode/blob/main/USERGUIDE.md).
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">EyreFree</dc:creator><pubDate>Mon, 07 Jun 2021 13:37:50 -0000</pubDate><guid>https://sourceforge.net28c0f35f732a8a6f08e090d80aa5b381c0f1062a</guid></item><item><title>Cheat Sheet modified by EyreFree</title><link>https://sourceforge.net/p/efqrcode/wiki/Cheat%2520Sheet/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v3
+++ v4
@@ -51,6 +51,28 @@
 Result:

 &lt;img rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/sample1.jpg" width="36%"/&gt;
+
+#### 4. Generation from GIF
+
+You can create GIF QRCode with function `generateWithGIF` of class `EFQRCode`, for example:
+
+    :::swift
+    //                  data: Data of input GIF
+    //             generator: An object of EFQRCodeGenerator, use for setting
+    // pathToSave (Optional): Path to save the output GIF, default is temp path
+    //      delay (Optional): Output QRCode GIF delay, default is same as input GIF
+    //  loopCount (Optional): Output QRCode GIF loopCount, default is same as input GIF
+
+    :::swift
+    if let qrcodeData = EFQRCode.generateWithGIF(data: data, generator: generator) {
+        print("Create QRCode image success.")
+    } else {
+        print("Create QRCode image failed!")
+    }
+
+You can get more information from the demo, result will like this:
+
+&lt;img rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/QRCodeGIF6.gif" width="42%"/&gt;

 ## User Guide

@@ -300,3 +322,31 @@
 Origin | 0.3 | 0.5 | 0.8
 :-------------------------:|:-------------------------:|:-------------------------:|:-------------------------:
 ![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/binarizationThreshold0.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/binarizationThreshold1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/binarizationThreshold2.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/binarizationThreshold3.jpg)
+
+### 3. Generation from GIF
+
+1. First you should get the complete data of a GIF file, type is `Data`, can not get from `UIImage` or you will only get the first frame;
+2. Then you can create GIF QRCode with function `generateWithGIF` of class `EFQRCode`, for example:
+
+    :::swift
+    //                  data: Data of input GIF
+    //             generator: An object of EFQRCodeGenerator, use for setting
+    // pathToSave (Optional): Path to save the output GIF, default is temp path
+    //      delay (Optional): Output QRCode GIF delay, default is same as input GIF
+    //  loopCount (Optional): Output QRCode GIF loopCount, default is same as input GIF
+
+The `generator` here is an object of class `EFQRCodeGenerator`, to process each frame in GIF, you can find the use of it above.
+
+    :::swift
+    if let qrcodeData = EFQRCode.generateWithGIF(data: data, generator: generator) {
+        print("Create QRCode image success.")
+    } else {
+        print("Create QRCode image failed!")
+    }
+
+You can get more information from the demo, result will like this:
+
+&lt;img rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/QRCodeGIF6.gif" width="42%"/&gt;
+
+3. Now you can get the complete data of output QRCode GIF, next we can save it to local path / system photo library / upload to server or some other things you want to do;
+4. Emmmmmm, note that the `tempResultPath` of `EFQRcode` is the path of data of GIF of last generation.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">EyreFree</dc:creator><pubDate>Mon, 07 Jun 2021 13:37:50 -0000</pubDate><guid>https://sourceforge.net5c45a4ff12e96fe136a6a403a798876036c03280</guid></item><item><title>Cheat Sheet modified by EyreFree</title><link>https://sourceforge.net/p/efqrcode/wiki/Cheat%2520Sheet/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -1,4 +1,4 @@
-## Fast Start
+## Quick Start

 #### 1. Import EFQRCode

@@ -32,27 +32,16 @@
 Create QR Code image, quick usage:

     :::swift
-    // Common parameters:
-    //                         content: Content of QR Code
-    // inputCorrectionLevel (Optional): error-tolerant rate
-    //                                  L 7%
-    //                                  M 15%
-    //                                  Q 25%
-    //                                  H 30%(Default)
-    //                 size (Optional): Width and height of image
-    //        magnification (Optional): Magnification of QRCode compare with the minimum size
-    //                                  (Parameter size will be ignored if magnification is not nil)
-    //      backgroundColor (Optional): Background color of QRCode
-    //      foregroundColor (Optional): Foreground color of QRCode
-    //                 icon (Optional): Icon in the middle of QR Code Image and it's setting
-    //            watermark (Optional): Watermark background image and it's setting
-    //                extra (Optional): Extra parameters
+    //                    content: Content of QR Code
+    //            size (Optional): Width and height of image
+    // backgroundColor (Optional): Background color of QRCode
+    // foregroundColor (Optional): Foreground color of QRCode
+    //       watermark (Optional): Background image of QRCode

     :::swift
     if let tryImage = EFQRCode.generate(
         content: "https://github.com/EyreFree/EFQRCode",
-        magnification: EFIntSize(width: 9, height: 9),
-        watermark: EFWatermark(image: UIImage(named: "WWF")?.toCGImage(), mode: .scaleAspectFill, isColorful: false)
+        watermark: UIImage(named: "WWF")?.toCGImage()
     ) {
         print("Create QRCode image success: \(tryImage)")
     } else {
@@ -73,7 +62,7 @@
 Or

     :::swift
-    EFQRCodeRecognizer(image: CGImage).contents
+    EFQRCodeRecognizer(image: CGImage).recognize()

 Two way before is exactly the same, because of the possibility of more than one two-dimensional code in the same iamge, so the return value is `[String]? ', if the return is nil means that the input data is incorrect or null. If the return array is empty, it means we can not recognize  any two-dimensional code at the image.

@@ -82,17 +71,114 @@
     :::swift
     EFQRCode.generate(
         content: String,
-        inputCorrectionLevel: EFInputCorrectionLevel,
         size: EFIntSize,
-        magnification: EFIntSize?,
         backgroundColor: CIColor,
         foregroundColor: CIColor,
-        icon: EFIcon?,
-        watermark: EFWatermark?,
-        extra: EFExtra?
+        watermark: CGImage?
     )

 Or
+
+    :::swift
+    let generator = EFQRCodeGenerator(content: String, size: EFIntSize)
+    generator.setContent(content: String)
+    generator.setMode(mode: EFQRCodeMode)
+    generator.setInputCorrectionLevel(inputCorrectionLevel: EFInputCorrectionLevel)
+    generator.setSize(size: EFIntSize)
+    generator.setMagnification(magnification: EFIntSize?)
+    generator.setColors(backgroundColor: CIColor, foregroundColor: CIColor)
+    generator.setIcon(icon: CGImage?, size: EFIntSize?)
+    generator.setWatermark(watermark: CGImage?, mode: EFWatermarkMode)
+    generator.setForegroundPointOffset(foregroundPointOffset: CGFloat)
+    generator.setAllowTransparent(allowTransparent: Bool)
+    generator.setPointShape(pointShape: EFPointShape)
+    generator.setBinarizationThreshold(binarizationThreshold: CGFloat)
+    
+    // Final two-dimensional code image we get
+    generator.generate()
+
+Two way before is exactly the same, the return value is `CGImage?`, if the return is nil means that there is some wrong during the generation.
+
+#### Parameters Explaination
+
+* **content: String?**
+
+Content, compulsive, capacity is limited, 1273 character most, the density of the two-dimensional lattice increases with the increase of the content. Comparison of different capacity is as follows:
+
+10 characters | 250 characters
+:-------------------------:|:-------------------------:
+![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareContent1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareContent2.jpg)
+
+* **mode: EFQRCodeMode**
+
+Mode of QR Code, the definition of EFQRCodeMode:
+
+    :::swift
+    public enum EFQRCodeMode: Int {
+        case none           = 0;
+        case grayscale      = 1;
+        case binarization   = 2;
+    }
+
+none | grayscale | binarization
+:-------------------------:|:-------------------------:|:-------------------------:
+![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/mode1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/mode2.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/mode3.jpg)
+
+* **inputCorrectionLevel: EFInputCorrectionLevel**
+
+Error-tolerant rate, optional, 4 different level, L: 7% / M 15% / Q 25% / H 30%, default is H, the definition of EFInputCorrectionLevel:
+
+    :::swift
+    // EFInputCorrectionLevel
+    public enum EFInputCorrectionLevel: Int {
+        case l = 0;     // L 7%
+        case m = 1;     // M 15%
+        case q = 2;     // Q 25%
+        case h = 3;     // H 30%
+    }
+
+Comparison of different inputCorrectionLevel:
+
+L | M | Q | H
+:-------------------------:|:-------------------------:|:-------------------------:|:-------------------------:
+![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel2.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel3.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel4.jpg)
+
+* **size: EFIntSize**
+
+Two-dimensional code length, optional, default is 256 (PS: if magnification is not nil, size will be ignored), the definition of EFIntSize:
+
+    :::swift
+    public class EFIntSize {
+        public private(set) var width: Int = 0
+        public private(set) var height: Int = 0
+    
+        public init(width: Int, height: Int) {
+            self.width = width
+            self.height = height
+        }
+    
+        public func toCGSize() -&amp;gt; CGSize {
+            return CGSize(width: self.width, height: self.height)
+        }
+    
+        public func widthCGFloat() -&amp;gt; CGFloat {
+            return CGFloat(width)
+        }
+    
+        public func heightCGFloat() -&amp;gt; CGFloat {
+            return CGFloat(height)
+        }
+    }
+
+234*234 | 312*234
+:-------------------------:|:-------------------------:
+![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/size1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/size2.jpg)
+
+* **magnification: EFIntSize?**
+
+Magnification, optional, default is nil.
+
+Because by the existence of size scaling two-dimensional code clarity is not high, if you want to get a more clear two-dimensional code, you can use magnification to set the size of the final generation of two-dimensional code. Here is the smallest ratio relative to the two-dimensional code matrix is concerned, if there is a wanted size but I hope to have a clear and size and have size approximation of the two-dimensional code by using magnification, through `maxMagnificationLessThanOrEqualTo (size: CGFloat), and `minMagnificationGreaterThanOrEqualTo (size: CGFloat), want to get magnification these two functions the specific value, the use of specific methods are as follows:

     :::swift
     let generator = EFQRCodeGenerator(
@@ -103,96 +189,6 @@
         backgroundColor: CIColor,
         foregroundColor: CIColor
     )
-    if let tryIcon = icon {
-        generator.setIcon(icon: EFIcon?)
-    }
-    if let tryWatermark = watermark {
-        generator.setWatermark(watermark: EFWatermark?)
-    }
-    if let tryExtra = extra {
-        generator.setExtra(extra: EFExtra?)
-    }
-    
-    // Final two-dimensional code image we get
-    generator.image
-
-Two way before is exactly the same, the return value is `CGImage?`, if the return is nil means that there is some wrong during the generation.
-
-#### Parameters Explaination
-
-* **content: String?**
-
-Content, compulsive, capacity is limited, 1273 character most, the density of the two-dimensional lattice increases with the increase of the content. Comparison of different capacity is as follows:
-
-10 characters | 250 characters
-:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareContent1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareContent2.jpg)
-
-* **inputCorrectionLevel: EFInputCorrectionLevel**
-
-Error-tolerant rate, optional, 4 different level, L: 7% / M 15% / Q 25% / H 30%, default is H, the definition of EFInputCorrectionLevel:
-
-    :::swift
-    // EFInputCorrectionLevel
-    public enum EFInputCorrectionLevel: Int {
-        case l = 0;     // L 7%
-        case m = 1;     // M 15%
-        case q = 2;     // Q 25%
-        case h = 3;     // H 30%
-    }
-
-Comparison of different inputCorrectionLevel:
-
-L | M | Q | H
-:-------------------------:|:-------------------------:|:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel2.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel3.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel4.jpg)
-
-* **size: EFIntSize**
-
-Two-dimensional code length, optional, default is 256 (PS: if magnification is not nil, size will be ignored), the definition of EFIntSize:
-
-    :::swift
-    public class EFIntSize {
-        public private(set) var width: Int = 0
-        public private(set) var height: Int = 0
-    
-        public init(width: Int, height: Int) {
-            self.width = width
-            self.height = height
-        }
-    
-        public func toCGSize() -&amp;gt; CGSize {
-            return CGSize(width: self.width, height: self.height)
-        }
-    
-        public func widthCGFloat() -&amp;gt; CGFloat {
-            return CGFloat(width)
-        }
-    
-        public func heightCGFloat() -&amp;gt; CGFloat {
-            return CGFloat(height)
-        }
-    }
-
-234*234 | 312*234
-:-------------------------:|:-------------------------:
-![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/size1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/size2.jpg)
-
-* **magnification: EFIntSize?**
-
-Magnification, optional, default is nil.
-
-Because by the existence of size scaling two-dimensional code clarity is not high, if you want to get a more clear two-dimensional code, you can use magnification to set the size of the final generation of two-dimensional code. Here is the smallest ratio relative to the two-dimensional code matrix is concerned, if there is a wanted size but I hope to have a clear and size and have size approximation of the two-dimensional code by using magnification, through `maxMagnificationLessThanOrEqualTo (size: CGFloat), and `minMagnificationGreaterThanOrEqualTo (size: CGFloat), want to get magnification these two functions the specific value, the use of specific methods are as follows:
-
-    :::swift
-    let generator = EFQRCodeGenerator(
-        content: String,
-        inputCorrectionLevel: EFInputCorrectionLevel,
-        size: EFIntSize,
-        magnification: EFIntSize?,
-        backgroundColor: CIColor,
-        foregroundColor: CIColor
-    )

     // Want to get max magnification when size is less than or equalTo 600
     if let magnification = generator.maxMagnificationLessThanOrEqualTo(size: 600) {
@@ -237,10 +233,6 @@
   Default 20% size | Set to 64  
 :-------------------------:|:-------------------------:
 ![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareIcon.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareIconSize.jpg)
-
-* **isIconColorful: Bool**
-
-Is icon colorful, optional, default is `true`.

 * **watermark: CGImage?**

@@ -271,10 +263,6 @@
         case bottomRight        = 11;
     }

-* **isWatermarkColorful: Bool**
-
-Is watermark colorful, optional, default is `true`.
-
 * **foregroundPointOffset: CGFloat**

 Foreground point offset, optional, default is 0, is not recommended to use, may make the two-dimensional code broken:
@@ -291,47 +279,24 @@
 :-------------------------:|:-------------------------:
 ![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareAllowTransparent1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareAllowTransparent2.jpg)

-* Other
-
-EFIcon is consist of icon, iconSize and isIconColorful, the definition is:
-
-    :::swift
-    public struct EFIcon {
-        public var image: CGImage?
-        public var size: EFIntSize?
-        public var isColorful: Bool = true
-    
-        public init(image: CGImage?, size: EFIntSize?, isColorful: Bool = true) {
-            self.image = image
-            self.size = size
-            self.isColorful = isColorful
-        }
-    }
-
-EFWatermark is consist of watermark, watermarkMode and isWatermarkColorful, the definition is:
-
-    :::swift
-    public struct EFWatermark {
-        public var image: CGImage?
-        public var mode: EFWatermarkMode = .scaleToFill
-        public var isColorful: Bool = true
-    
-        public init(image: CGImage?, mode: EFWatermarkMode = .scaleToFill, isColorful: Bool = true) {
-            self.image = image
-            self.mode = mode
-            self.isColorful = isColorful
-        }
-    }
-
-EFExtra is consist of foregroundPointOffset and allowTransparent, the definition is:
-
-    :::swift
-    public struct EFExtra {
-        public var foregroundPointOffset: CGFloat = 0
-        public var allowTransparent: Bool = true
-    
-        public init(foregroundPointOffset: CGFloat = 0, allowTransparent: Bool = true) {
-            self.foregroundPointOffset = foregroundPointOffset
-            self.allowTransparent = allowTransparent
-        }
-    }
+* **pointShape: EFPointShape**
+
+Shape of foreground point, default is `.square`, the definition of UIViewContentMode:
+
+    :::swift
+    public enum EFPointShape: Int {
+        case square         = 0;
+        case circle         = 1;
+    }
+
+square | circle
+:-------------------------:|:-------------------------:
+![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareAllowTransparent1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/pointShape.jpg)
+
+* **binarizationThreshold: CGFloat**
+
+Threshold for binarization (Only for mode binarization).
+
+Origin | 0.3 | 0.5 | 0.8
+:-------------------------:|:-------------------------:|:-------------------------:|:-------------------------:
+![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/binarizationThreshold0.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/binarizationThreshold1.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/binarizationThreshold2.jpg)|![](https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/binarizationThreshold3.jpg)
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">EyreFree</dc:creator><pubDate>Mon, 07 Jun 2021 13:37:50 -0000</pubDate><guid>https://sourceforge.netf9635982d742e94ad4b0c43cd25e044e6c21c34a</guid></item><item><title>Cheat Sheet modified by EyreFree</title><link>https://sourceforge.net/p/efqrcode/wiki/Cheat%2520Sheet/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -1,3 +1,5 @@
+## Fast Start
+
 #### 1. Import EFQRCode

 Import EFQRCode module where you want to use it:
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">EyreFree</dc:creator><pubDate>Mon, 07 Jun 2021 13:37:49 -0000</pubDate><guid>https://sourceforge.net5ea5fb2738ac5b5c042d26c94a7ef36e2dca7c31</guid></item><item><title>Cheat Sheet modified by EyreFree</title><link>https://sourceforge.net/p/efqrcode/wiki/Cheat%2520Sheet/</link><description>&lt;div class="markdown_content"&gt;&lt;h4 id="1-import-efqrcode"&gt;1. Import EFQRCode&lt;/h4&gt;
&lt;p&gt;Import EFQRCode module where you want to use it:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;import&lt;/span&gt; &lt;span class="nc"&gt;EFQRCode&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h4 id="2-recognition"&gt;2. Recognition&lt;/h4&gt;
&lt;p&gt;Get QR Codes from CGImage, maybe there are several codes in a image, so it will return an array:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;testImage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;UIImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;named&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"test.png"&lt;/span&gt;&lt;span class="p"&gt;)?.&lt;/span&gt;&lt;span class="n"&gt;toCGImage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;tryCodes&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EFQRCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recognize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;testImage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tryCodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="bp"&gt;count&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="bp"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"There are &lt;/span&gt;&lt;span class="si"&gt;\(&lt;/span&gt;&lt;span class="n"&gt;tryCodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="bp"&gt;count&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s"&gt; codes in testImage."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tryCodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enumerated&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="bp"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The content of &lt;/span&gt;&lt;span class="si"&gt;\(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s"&gt; QR Code is: &lt;/span&gt;&lt;span class="si"&gt;\(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s"&gt;."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="bp"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"There is no QR Codes in testImage."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="bp"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Recognize failed, check your input image!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h4 id="3-generation"&gt;3. Generation&lt;/h4&gt;
&lt;p&gt;Create QR Code image, quick usage:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;// Common parameters:&lt;/span&gt;
&lt;span class="c1"&gt;//                         content: Content of QR Code&lt;/span&gt;
&lt;span class="c1"&gt;// inputCorrectionLevel (Optional): error-tolerant rate&lt;/span&gt;
&lt;span class="c1"&gt;//                                  L 7%&lt;/span&gt;
&lt;span class="c1"&gt;//                                  M 15%&lt;/span&gt;
&lt;span class="c1"&gt;//                                  Q 25%&lt;/span&gt;
&lt;span class="c1"&gt;//                                  H 30%(Default)&lt;/span&gt;
&lt;span class="c1"&gt;//                 size (Optional): Width and height of image&lt;/span&gt;
&lt;span class="c1"&gt;//        magnification (Optional): Magnification of QRCode compare with the minimum size&lt;/span&gt;
&lt;span class="c1"&gt;//                                  (Parameter size will be ignored if magnification is not nil)&lt;/span&gt;
&lt;span class="c1"&gt;//      backgroundColor (Optional): Background color of QRCode&lt;/span&gt;
&lt;span class="c1"&gt;//      foregroundColor (Optional): Foreground color of QRCode&lt;/span&gt;
&lt;span class="c1"&gt;//                 icon (Optional): Icon in the middle of QR Code Image and it's setting&lt;/span&gt;
&lt;span class="c1"&gt;//            watermark (Optional): Watermark background image and it's setting&lt;/span&gt;
&lt;span class="c1"&gt;//                extra (Optional): Extra parameters&lt;/span&gt;

&lt;span class="p"&gt;:::&lt;/span&gt;&lt;span class="n"&gt;swift&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;tryImage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EFQRCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"https://github.com/EyreFree/EFQRCode"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;magnification&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFIntSize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFWatermark&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;UIImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;named&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"WWF"&lt;/span&gt;&lt;span class="p"&gt;)?.&lt;/span&gt;&lt;span class="n"&gt;toCGImage&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scaleAspectFill&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;isColorful&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="bp"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Create QRCode image success: &lt;/span&gt;&lt;span class="si"&gt;\(&lt;/span&gt;&lt;span class="n"&gt;tryImage&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="bp"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Create QRCode image failed!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Result: &lt;/p&gt;
&lt;p&gt;&lt;img rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/sample1.jpg" width="36%"/&gt;&lt;/p&gt;
&lt;h2 id="user-guide"&gt;User Guide&lt;/h2&gt;
&lt;h3 id="1-recognition"&gt;1. Recognition&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;EFQRCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recognize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CGImage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Or&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;EFQRCodeRecognizer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CGImage&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;contents&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Two way before is exactly the same, because of the possibility of more than one two-dimensional code in the same iamge, so the return value is `&lt;span&gt;[String]&lt;/span&gt;? ', if the return is nil means that the input data is incorrect or null. If the return array is empty, it means we can not recognize  any two-dimensional code at the image.&lt;/p&gt;
&lt;h3 id="2-generation"&gt;2. Generation&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;EFQRCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;inputCorrectionLevel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFInputCorrectionLevel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFIntSize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;magnification&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFIntSize&lt;/span&gt;&lt;span class="p"&gt;?,&lt;/span&gt;
    &lt;span class="n"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;CIColor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;foregroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;CIColor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;icon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFIcon&lt;/span&gt;&lt;span class="p"&gt;?,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFWatermark&lt;/span&gt;&lt;span class="p"&gt;?,&lt;/span&gt;
    &lt;span class="n"&gt;extra&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFExtra&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Or&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;generator&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EFQRCodeGenerator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;inputCorrectionLevel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFInputCorrectionLevel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFIntSize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;magnification&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFIntSize&lt;/span&gt;&lt;span class="p"&gt;?,&lt;/span&gt;
    &lt;span class="n"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;CIColor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;foregroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;CIColor&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;tryIcon&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;icon&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setIcon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;icon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFIcon&lt;/span&gt;&lt;span class="p"&gt;?)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;tryWatermark&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;watermark&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setWatermark&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFWatermark&lt;/span&gt;&lt;span class="p"&gt;?)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;tryExtra&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;extra&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setExtra&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;extra&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFExtra&lt;/span&gt;&lt;span class="p"&gt;?)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Final two-dimensional code image we get&lt;/span&gt;
&lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Two way before is exactly the same, the return value is &lt;code&gt;CGImage?&lt;/code&gt;, if the return is nil means that there is some wrong during the generation.&lt;/p&gt;
&lt;h4 id="parameters-explaination"&gt;Parameters Explaination&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;content: String?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Content, compulsive, capacity is limited, 1273 character most, the density of the two-dimensional lattice increases with the increase of the content. Comparison of different capacity is as follows:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align="center"&gt;10 characters&lt;/th&gt;
&lt;th align="center"&gt;250 characters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareContent1.jpg"/&gt;&lt;/td&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareContent2.jpg"/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;inputCorrectionLevel: EFInputCorrectionLevel&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Error-tolerant rate, optional, 4 different level, L: 7% / M 15% / Q 25% / H 30%, default is H, the definition of EFInputCorrectionLevel:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;// EFInputCorrectionLevel&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;EFInputCorrectionLevel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// L 7%&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// M 15%&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// Q 25%&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// H 30%&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Comparison of different inputCorrectionLevel:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align="center"&gt;L&lt;/th&gt;
&lt;th align="center"&gt;M&lt;/th&gt;
&lt;th align="center"&gt;Q&lt;/th&gt;
&lt;th align="center"&gt;H&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel1.jpg"/&gt;&lt;/td&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel2.jpg"/&gt;&lt;/td&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel3.jpg"/&gt;&lt;/td&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareInputCorrectionLevel4.jpg"/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;size: EFIntSize&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Two-dimensional code length, optional, default is 256 (PS: if magnification is not nil, size will be ignored), the definition of EFIntSize:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;EFIntSize&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;set&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Int&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;set&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Int&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kc"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;
        &lt;span class="kc"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;toCGSize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;CGSize&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;CGSize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;widthCGFloat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;CGFloat&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;CGFloat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;heightCGFloat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;CGFloat&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;CGFloat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align="center"&gt;234*234&lt;/th&gt;
&lt;th align="center"&gt;312*234&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/size1.jpg"/&gt;&lt;/td&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/size2.jpg"/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;magnification: EFIntSize?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Magnification, optional, default is nil.&lt;/p&gt;
&lt;p&gt;Because by the existence of size scaling two-dimensional code clarity is not high, if you want to get a more clear two-dimensional code, you can use magnification to set the size of the final generation of two-dimensional code. Here is the smallest ratio relative to the two-dimensional code matrix is concerned, if there is a wanted size but I hope to have a clear and size and have size approximation of the two-dimensional code by using magnification, through &lt;code&gt;maxMagnificationLessThanOrEqualTo (size: CGFloat), and&lt;/code&gt;minMagnificationGreaterThanOrEqualTo (size: CGFloat), want to get magnification these two functions the specific value, the use of specific methods are as follows:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;generator&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EFQRCodeGenerator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;inputCorrectionLevel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFInputCorrectionLevel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFIntSize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;magnification&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFIntSize&lt;/span&gt;&lt;span class="p"&gt;?,&lt;/span&gt;
    &lt;span class="n"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;CIColor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;foregroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;CIColor&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// Want to get max magnification when size is less than or equalTo 600&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;magnification&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;maxMagnificationLessThanOrEqualTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;magnification&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EFIntSize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;magnification&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;magnification&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Or&lt;/span&gt;

&lt;span class="c1"&gt;// Want to get min magnification when width is greater than or equalTo 600 and height is greater than or equalTo 800&lt;/span&gt;
&lt;span class="c1"&gt;// if let magnificationWidth = generator.minMagnificationGreaterThanOrEqualTo(size: 600),&lt;/span&gt;
&lt;span class="c1"&gt;//     let magnificationHeight = generator.minMagnificationGreaterThanOrEqualTo(size: 600) {&lt;/span&gt;
&lt;span class="c1"&gt;//     generator.magnification = EFIntSize(width: magnificationWidth, height: magnificationHeight)&lt;/span&gt;
&lt;span class="c1"&gt;// }&lt;/span&gt;

&lt;span class="c1"&gt;// Final two-dimensional code image&lt;/span&gt;
&lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align="center"&gt;size 300&lt;/th&gt;
&lt;th align="center"&gt;magnification 9&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareMagnification1.jpg"/&gt;&lt;/td&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareMagnification2.jpg"/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;backgroundColor: CIColor&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;BackgroundColor, optional, default is white.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;foregroundColor: CIColor&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ForegroundColor, optional, color of code point, default is black.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align="center"&gt;ForegroundColor set to red&lt;/th&gt;
&lt;th align="center"&gt;BackgroundColor set to gray&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareForegroundcolor.jpg"/&gt;&lt;/td&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareBackgroundcolor.jpg"/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;icon: CGImage?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Icon image in the center of code image, optional, default is nil.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;iconSize: CGFloat?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Size of icon image, optional, default is 20% of size: &lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align="center"&gt;Default 20% size&lt;/th&gt;
&lt;th align="center"&gt;Set to 64&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareIcon.jpg"/&gt;&lt;/td&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareIconSize.jpg"/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;isIconColorful: Bool&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Is icon colorful, optional, default is &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;watermark: CGImage?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Watermark image, optional, default is nil, for example: &lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align="center"&gt;1&lt;/th&gt;
&lt;th align="center"&gt;2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareWatermark1.jpg"/&gt;&lt;/td&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareWatermark2.jpg"/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;watermarkMode: EFWatermarkMode&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The watermark placed in two-dimensional code position, optional, default is scaleAspectFill, refer to UIViewContentMode, you can treat the two-dimensional code as UIImageView, the definition of UIViewContentMode:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;// Like UIViewContentMode&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;EFWatermarkMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;scaleToFill&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;scaleAspectFit&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;scaleAspectFill&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;center&lt;/span&gt;             &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;top&lt;/span&gt;                &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;bottom&lt;/span&gt;             &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="kr"&gt;left&lt;/span&gt;               &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="kr"&gt;right&lt;/span&gt;              &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;topLeft&lt;/span&gt;            &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;topRight&lt;/span&gt;           &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;bottomLeft&lt;/span&gt;         &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;bottomRight&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;isWatermarkColorful: Bool&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Is watermark colorful, optional, default is &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;foregroundPointOffset: CGFloat&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Foreground point offset, optional, default is 0, is not recommended to use, may make the two-dimensional code broken:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align="center"&gt;0&lt;/th&gt;
&lt;th align="center"&gt;0.5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareForegroundPointOffset1.jpg"/&gt;&lt;/td&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareForegroundPointOffset2.jpg"/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;allowTransparent: Bool&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Allow watermark image transparent, optional, default is &lt;code&gt;true&lt;/code&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align="center"&gt;true&lt;/th&gt;
&lt;th align="center"&gt;false&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareAllowTransparent1.jpg"/&gt;&lt;/td&gt;
&lt;td align="center"&gt;&lt;img alt="" rel="nofollow" src="https://raw.githubusercontent.com/EyreFree/EFQRCode/assets/compareAllowTransparent2.jpg"/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Other&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;EFIcon is consist of icon, iconSize and isIconColorful, the definition is:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;EFIcon&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CGImage&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFIntSize&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;isColorful&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Bool&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CGImage&lt;/span&gt;&lt;span class="p"&gt;?,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFIntSize&lt;/span&gt;&lt;span class="p"&gt;?,&lt;/span&gt; &lt;span class="n"&gt;isColorful&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Bool&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kc"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;image&lt;/span&gt;
        &lt;span class="kc"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;
        &lt;span class="kc"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isColorful&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;isColorful&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;EFWatermark is consist of watermark, watermarkMode and isWatermarkColorful, the definition is:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;EFWatermark&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CGImage&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFWatermarkMode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scaleToFill&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;isColorful&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Bool&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CGImage&lt;/span&gt;&lt;span class="p"&gt;?,&lt;/span&gt; &lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EFWatermarkMode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scaleToFill&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;isColorful&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Bool&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kc"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;image&lt;/span&gt;
        &lt;span class="kc"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mode&lt;/span&gt;
        &lt;span class="kc"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isColorful&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;isColorful&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;EFExtra is consist of foregroundPointOffset and allowTransparent, the definition is:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;EFExtra&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;foregroundPointOffset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CGFloat&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;allowTransparent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Bool&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;foregroundPointOffset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CGFloat&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;allowTransparent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Bool&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kc"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;foregroundPointOffset&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;foregroundPointOffset&lt;/span&gt;
        &lt;span class="kc"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;allowTransparent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;allowTransparent&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">EyreFree</dc:creator><pubDate>Mon, 07 Jun 2021 13:37:48 -0000</pubDate><guid>https://sourceforge.netd9fd5485957ae68b52708754fc11ea164f6981c8</guid></item></channel></rss>