HOME > バーコードスキャン
なんと2Dバーコード読み込み機能はAVFoundationに実装されています。
標準のAVFoundationを利用しますので結構簡単に実装可能です。カメラが起動してバーコードを読み込ませると番号のログが表示されます
import UIKit
import AVFoundation
class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
let session: AVCaptureSession = AVCaptureSession()
var prevlayer: AVCaptureVideoPreviewLayer!
var hview: UIView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
//準備(サイズ調整、ボーダーカラー、カメラオブジェクト取得、エラー処理)
self.hview.autoresizingMask = UIViewAutoresizing.FlexibleTopMargin |
UIViewAutoresizing.FlexibleBottomMargin |
UIViewAutoresizing.FlexibleLeftMargin |
UIViewAutoresizing.FlexibleRightMargin
self.hview.layer.borderColor = UIColor.greenColor().CGColor
self.hview.layer.borderWidth = 3
self.view.addSubview(self.hview)
let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
var error : NSError? = nil
//インプット
let input : AVCaptureDeviceInput? = AVCaptureDeviceInput.deviceInputWithDevice(device, error: &error) as? AVCaptureDeviceInput
if input != nil {
session.addInput(input)//カメラインプットセット
}else {
println(error)
}
//アウトプット
let output = AVCaptureMetadataOutput()
output.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
session.addOutput(output)//プレビューアウトプットセット
output.metadataObjectTypes = output.availableMetadataObjectTypes
prevlayer = AVCaptureVideoPreviewLayer.layerWithSession(session) as AVCaptureVideoPreviewLayer
prevlayer.frame = self.view.bounds
prevlayer.videoGravity = AVLayerVideoGravityResizeAspectFill
self.view.layer.addSublayer(prevlayer)
session.startRunning()//開始!
}
//バーコードが見つかった時に呼ばれる
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
var highlightViewRect = CGRectZero
var barCodeObject : AVMetadataObject!
var detectionString : String!
//対応バーコードタイプ
let barCodeTypes = [AVMetadataObjectTypeUPCECode,
AVMetadataObjectTypeCode39Code,
AVMetadataObjectTypeCode39Mod43Code,
AVMetadataObjectTypeEAN13Code,
AVMetadataObjectTypeEAN8Code,
AVMetadataObjectTypeCode93Code,
AVMetadataObjectTypeCode128Code,
AVMetadataObjectTypePDF417Code,
AVMetadataObjectTypeQRCode,
AVMetadataObjectTypeAztecCode
]
//複数のバーコードの同時取得も可能
for metadata in metadataObjects {
for barcodeType in barCodeTypes {
if metadata.type == barcodeType {
barCodeObject = self.prevlayer.transformedMetadataObjectForMetadataObject(metadata as AVMetadataMachineReadableCodeObject)
highlightViewRect = barCodeObject.bounds
detectionString = (metadata as AVMetadataMachineReadableCodeObject).stringValue
self.session.stopRunning()
break
}
}
}
println(detectionString)
self.prevlayer.frame = highlightViewRect
self.view.bringSubviewToFront(self.hview)
}
}
バーコードの種類って一種類じゃないんですよね、、、結構沢山。郵便局や佐川やクロネコヤマトの荷札のバーコードはNW-7のようです。うーん 奥が深いですね。こちら色んな種類のバーコードと読みとり機器が載っているサイトです。(バーコードの種類と特徴)
iOSで2次元バーコードを読み取れるかできないだろうと思っていたのでスンナリ読み込めましたので びっくりしました。以前読み込む仕事があったのですが「できません」といった記憶が、、、、手元にiPhoneがあったので できたんですね。バーコードってもっと複雑な事をしているのかと思っていました。
2021-05-14 14:21:41 | WatchOSのwatchconnectivityのFiletransferの落とし穴。と、避け方。
AppleWatch 実機だと成功するんだけど、シュミレーターだと失敗するという、、、
昔作成してた時は成功してたのになーと思って調べると、どうやら昔は成功してたみたい。watchOS6以降は... |
2021-05-06 14:04:37 | LINEのアニメーションスタンプ制作の落とし穴、、、失敗談
ゴールデンウィークにLINEスタンプを作成してみました。
作り切って申請も通したんですが、意図したアニメーションと違う、、、、
LINEクリエーターの画面だと、アニメーションのプレビュー... |
2021-05-01 18:05:35 | 久しぶりのAdmobをobjective-cに実装。コンパイルエラーだらけ。バーミッション不具合でエミュレータにインスコできない。
忘れないようにメモ
エミュレータにアプリをインストールする際にパーミッション系のエラーがでた時、また、iphone実機にインストールする際にも権限系のエラーが出る場合。
ターゲット→ex... |
Tweet | |||
|