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

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

ただいまの
回答率

90.52%

  • Swift

    7232questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 840

kusukusu

score 20

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

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

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

イメージ説明

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

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

var captureSession : AVCaptureSession?
    var videoPreviewLayer : AVCaptureVideoPreviewLayer?
    var qrCodeFrameView : UIView?
    override func viewDidLoad() {
        super.viewDidLoad()

        let captureDevice: AVCaptureDevice = .defaultDevice(withMediaType: AVMediaTypeVideo)

        do {
            let deviceInput = try AVCaptureDeviceInput(device: captureDevice)

            captureSession = AVCaptureSession()

            captureSession?.addInput(deviceInput)

            let captureMetadataOutput = AVCaptureMetadataOutput()
            captureSession?.addOutput(captureMetadataOutput)
            captureMetadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
            captureMetadataOutput.metadataObjectTypes = [AVMetadataObjectTypeQRCode]
            videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession )
            videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
            videoPreviewLayer?.frame = view.layer.bounds

            view.layer.addSublayer(videoPreviewLayer!)
            qrCodeFrameView = UIView()

            if let qrCodeFrameView = qrCodeFrameView {
                qrCodeFrameView.layer.borderColor = UIColor.green.cgColor
                qrCodeFrameView.layer.borderWidth = 2
                view.addSubview(qrCodeFrameView)
                view.bringSubview(toFront: qrCodeFrameView)
            }
        } catch {
            print(error)
            return 
        }
}

func captureOutput (_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) {



        if metadataObjects == nil || metadataObjects.count == 0   {
            qrCodeFrameView?.frame = .zero
            print("QRコードが見つかりません")
            return
        }

        let metaData = metadataObjects[0] as! AVMetadataMachineReadableCodeObject

        if metaData.type == AVMetadataObjectTypeQRCode {
            let barCodeObject = videoPreviewLayer?.transformedMetadataObject(for: metaData)
            qrCodeFrameView?.frame = barCodeObject!.bounds

            if metaData.stringValue != nil {
                coordinateInput.text = metaData.stringValue
                print(metaData.stringValue)
            } 
        } 
    }
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+4

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

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

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

ご参考まで

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/17 14:49

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

    キャンセル

+3

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/17 14:45

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

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    CAGradiationLayerの動作が遅い

    はじめまして、質問をご覧頂いてありがとうございます。 現在、iOS8・Xcode7.3、swift2という環境でStoryBoardを利用せずにiOSアプリの開発を行っています。

  • 解決済

    Extra argument 'error' in call

    栄養管理アプリを作成している者です。 下記URLを参考にバーコードスキャン機能を実装しています。 http://swift-salaryman.com/avmetadataob

  • 解決済

    swiftのUIViewのTransition中の影を無くしたい

    UIViewの切り替えのアニメーションを以下のようなコードを利用して、行っています。 ほとんど希望通りの動きをするのですが、アニメーション中にViewに影がついてしまうのを無くし

  • 解決済

    viewがスクリーンに登場したことを検知したいです。

    お世話になります。 現在、スクロールビュー上などで、UIViewがスクリーンに登場するたびに、UIViewに対してアニメーションをつけたいと考えております。 スクロールアクショ

  • 解決済

    【swift】簡単なbarcode リーダーを作りたい

    以下を参考に作成しましたが、swift3だとエラーだらけで、 使えません。swift3で使用数には、どうすればいいか教えてください。 http://swift-salary

  • 解決済

    【Swift】Viewの座標位置の変換がうまくいかない。

    前提・実現したいこと UIViewに枠線をつけ画面中央に配置しており、その中に収まっている部分のUIImagewのimageを取得したいのです。 Viewに収まっている部分をc

  • 解決済

    画面移行で一部の画面を変更する方法

    ここで、エラーが起きてしまいました。 変な題名にしてすみません。 私が思っているのは、Yahoo知恵袋で例えると,マイページの画面で、質問ボタンを押した時、自分が投稿し

  • 解決済

    Swift 画像をタップで扉が開くようなアニメーションをするには?

    Swiftにてアプリを開発中です。 扉の画像を配置し、その画像をタップすると、扉が開くようなアニメーションをしたいと考えております。 扉が開くアニメーションの先にさらに画像を配

同じタグがついた質問を見る

  • Swift

    7232questions

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