17316


swiftプログラムでQRコードの読み取りには  
.metadataObjectTypes = [AVMetadataObjectTypeQRCode]  
と標準のフレームワークがありますが、QRコード作成の標準フレームワークが見つかりません。

ZXingObjCを使えばできるのですが、もし標準のフレームワークがあるのにZXingObjCを使っていても嫌なので、もしあればご教示お願いします。


CC BY-SA 3.0
2015-10-05T14:24:41.663
17289
2022-08-10T08:50:06.113
2022-08-10T08:50:06.113
3060
8593
question
swift qr-code
swiftプログラムでQRコード作成


QRコードの生成には、Core Image frameworkに含まれている、`CIQRCodeGenerator`を使うことができます。

<https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIQRCodeGenerator>


CC BY-SA 3.0
2015-10-05T16:59:24.047
17295
2015-10-05T16:59:24.047
5519
17289
answer


[`CIQRCodeGenerator`](https://developer.apple.com/library/prerelease/mac/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIQRCodeGenerator)
で:

[code]

    import UIKit
    import CoreImage
    
    func createQRCode(message: String, correctionLevel: String = "M", moduleSize: CGFloat = 1) -> UIImage {
    
        let dat = message.dataUsingEncoding(NSUTF8StringEncoding)!
    
        let qr = CIFilter(name: "CIQRCodeGenerator", withInputParameters: [
            "inputMessage": dat,
            "inputCorrectionLevel": correctionLevel,
            ])!
    
        // moduleSize でリサイズ
        let sizeTransform = CGAffineTransformMakeScale(moduleSize, moduleSize)
        let ciImg = qr.outputImage!.imageByApplyingTransform(sizeTransform)
    
        return UIImage(CIImage: ciImg, scale: 1, orientation: .Up)
    }
    
[/code]

[![screenshot](https://i.stack.imgur.com/EmosV.png)](https://i.stack.imgur.com/EmosV.png)

例では、`CIImage` バックエンドの `UIImage` を生成していますが、使用用途によっては`CGImage`
取れないと不便かもしれないので、その場合最後の`return`文を:

[code]

        let ciContext = CIContext(options: nil)
        let cgImg = ciContext.createCGImage(ciImg, fromRect: ciImg.extent)
        return UIImage(CGImage: cgImg, scale: 1, orientation: .Up)
    }
    
[/code]

にすれば良いかと思います。


CC BY-SA 3.0
2015-10-06T08:38:00.510
17316
2015-10-07T02:22:31.230
2015-10-07T02:22:31.230
3489
3489
17289
answer