質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

3336閲覧

特別なQRコードの読み込み

kusukusu

総合スコア29

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2017/03/17 01:56

swiftを勉強し始めた初心者です、よろしくお願いします!

・わからないこと
一般的なQRコードの読み込みと生成(URLのような文字列)はできるようになったのですが、下の画像のQRコードは特別らしく、読み込むことができません。
captureOutputメソッドのmetadataObjectsにnilが入ってしまいます。

QRコード読み込みの勉強中にこの問題に引っかかって、調べまわったのですがそれらしい方法が見つかりませんでした。
下のQRの画像は「チケットバックforプリパラ」というアプリを使用させていただいたものですが、このアプリではその特別なQRコードを読み込んで生成することができているので、方法はあるはずなのですが方法が分かりません。

イメージ説明

是非アドバイスをよろしくお願いいたします。

現在のコードを載せておきます。

Swift3

1var captureSession : AVCaptureSession? 2 var videoPreviewLayer : AVCaptureVideoPreviewLayer? 3 var qrCodeFrameView : UIView? 4 override func viewDidLoad() { 5 super.viewDidLoad() 6 7 let captureDevice: AVCaptureDevice = .defaultDevice(withMediaType: AVMediaTypeVideo) 8 9 do { 10 let deviceInput = try AVCaptureDeviceInput(device: captureDevice) 11 12 captureSession = AVCaptureSession() 13 14 captureSession?.addInput(deviceInput) 15 16 let captureMetadataOutput = AVCaptureMetadataOutput() 17 captureSession?.addOutput(captureMetadataOutput) 18 captureMetadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) 19 captureMetadataOutput.metadataObjectTypes = [AVMetadataObjectTypeQRCode] 20 videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession ) 21 videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill 22 videoPreviewLayer?.frame = view.layer.bounds 23 24 view.layer.addSublayer(videoPreviewLayer!) 25 qrCodeFrameView = UIView() 26 27 if let qrCodeFrameView = qrCodeFrameView { 28 qrCodeFrameView.layer.borderColor = UIColor.green.cgColor 29 qrCodeFrameView.layer.borderWidth = 2 30 view.addSubview(qrCodeFrameView) 31 view.bringSubview(toFront: qrCodeFrameView) 32 } 33 } catch { 34 print(error) 35 return 36 } 37} 38 39func captureOutput (_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) { 40 41 42 43 if metadataObjects == nil || metadataObjects.count == 0 { 44 qrCodeFrameView?.frame = .zero 45 print("QRコードが見つかりません") 46 return 47 } 48 49 let metaData = metadataObjects[0] as! AVMetadataMachineReadableCodeObject 50 51 if metaData.type == AVMetadataObjectTypeQRCode { 52 let barCodeObject = videoPreviewLayer?.transformedMetadataObject(for: metaData) 53 qrCodeFrameView?.frame = barCodeObject!.bounds 54 55 if metaData.stringValue != nil { 56 coordinateInput.text = metaData.stringValue 57 print(metaData.stringValue) 58 } 59 } 60 } 61

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

QRコード、といってもいくつか種類があります

【QRコード種類】
http://www.qrcode.com/codes/
(QRコード開発元(株)デンソーウェーブ運営サイト)

「チケットバックforプリパラ」というアプリが生成するQRコードは、その性質上簡単に生成・解析できてしまっては困るでしょうから特別なものである可能性は高いですね
(上記サイトで紹介されている「SQRC」に該当)

ご参考まで

投稿2017/03/17 05:16

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kusukusu

2017/03/17 05:49

読み取り制限のついたQRなんていうものがあるんですね…! 今回読み取ろうとしたのは、プリパラというゲームのカードに記載されているものなので、そういった理由で読み込めないようになっているのですね… そういうことなら諦めるしかなさそうですね;;
guest

0

通常のQRコードとして読み取れないように作られている、特定サービスのQRコードは仕様がわからない限り、読み取ることはできないと思いますよ。
仕様が公開されていないのに無理矢理解読することはできますが、法律的に問題がありそうですね。

投稿2017/03/17 02:04

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kusukusu

2017/03/17 05:45

回答ありがとうございます! 確かに法律的に危ないかもしれないですね;;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問