github email
Howtousebarcode

如何读取照片中的条码信息

最近考虑到如何输入图书信息到系统中,发现了条码信息的重要性,所以想使用手机自带的功能来使用。

服务器端使用 C# 和 Python 来使用验证上传的图片。

Choice1:Python 获取条码信息

相对而言 Python 的库比较多,使用起来比较方便。

1. 安装 zbar

brew install zbar

依赖性:Fetching dependencies for zbar: jbig2dec, libidn, ghostscript, libde265, shared-mime-info, libheif, liblqr, libomp, libraw and imagemagick

2. 安装 pyzbar

pip install pyzbar

3. 安装 Pillow

pip install pillow

4. Test Code

from pyzbar.pyzbar import decode
from PIL import Image

bar_result = decode(Image.open('book1.jpg'))

if len(barresult) > 0 :
    print("find barcode:" + barresult[0].data.decode())
else:
    print("can't find barcode!")

Choice2: C# 获取条码信息

1. NuGet 安装 BarCode

2. Test Code

using IronBarCode;
var resultFromFile = BarcodeReader.Read(@"book1.jpg");
foreach(var PageReslut in resultFromFile)
{
    Console.WriteLine("find barcode is:" + PageReslut.Text);
}

Choice3:安卓使用相机读取条码

1. 在build.gradle文件中添加ZXing库的依赖

dependencies {
    implementation 'com.journeyapps:zxing-android-embedded:4.1.0'
}

2.Test Code

package com.guobingyi.barcodedemo

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.TextView
import com.google.zxing.integration.android.IntentIntegrator
import com.google.zxing.integration.android.IntentResult

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val scanBtn = findViewById<Button>(R.id.scanBarCodeBtn)
        scanBtn.setOnClickListener( View.OnClickListener {
            val scanner = IntentIntegrator(this)
            scanner.initiateScan()
        })
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        val result: IntentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data)
        if (result.contents != null) {
            // 扫描成功,可以在这里处理结果
            val barcode = result.contents
            val barCodeTxt = findViewById<TextView>(R.id.barCodeTxt)
            barCodeTxt.setText(barcode)
        } else {
            super.onActivityResult(requestCode, resultCode, data)
        }
    }
}