从php中的图像读取/解码条形码

时间:2015-07-16 00:17:02

标签: javascript php html barcode

我正在研究构建一个13位EAN条形码扫描器,该扫描器可在移动设备上在网络上运行,并将使用设备相机拍摄条形码图像进行扫描和解码。我不是想通过原生应用程序来做这件事,因为我更愿意将这部分作为我的原生网站搜索体验。例如。移动设备上的网站访问者将被提示扫描条形码而无需打开应用程序。

此脚本在桌面https://github.com/EddieLa/JOB上运行良好,并使用Navigator.getUserMedia属性在JavaScript中完成所有这些操作,但Android中的支持才刚刚开始,IOS上的支持不存在http://caniuse.com/#feat=stream

所以我想知道我是否可以改为支持移动设备,这是我想要做的全部,而不是阅读浏览器中的条形码,拍下条形码的照片,发送给通过Ajax服务器,让服务器解码图像并将响应发送回网页。

通过这种方法,我知道有些python脚本可以读取条形码,例如https://pypi.python.org/pypi/zbar,但是它有PHP等价吗?

3 个答案:

答案 0 :(得分:6)

根据我的经验, ZBAR 是我经过长时间研究后发现的最好的一个,并且很多尝试使用其他免费选项,包括BarBara。只需下载并安装ZBar(取决于您的操作系统)并运行PHP的exec命令。 Windows示例:

exec('C:\\"Program Files (x86)"\\ZBar\\bin\\zbarimg -q C:\\path\\img.jpg', $result);

print_r($result);

我以多种格式(jpg,gif,png和bmp)在10.000+大图像中运行ZBar,并且在大约70%的条形码中成功检测到条形码。它可以读取许多条形码格式,包括EAN-13,QR-Code等,并且可以读取同一图像中的多个条形码。确实值得一试!

答案 1 :(得分:1)

使用BarBara条形码库:

官方网站:http://sourceforge.net/projects/barbara

下载php源代码:http://sourceforge.net/projects/barbara/files/BarBara%20Source/PHP5/barbara.zip/download

测试:

error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once "barcode.php";

$bc = new barcode;
$scanner = new BarScan;

$bc->load("barcode.js");
echo "Dictionary Loaded..";


$scanner->Codecs = $bc;
echo "Test";
//Manually set code type
$scanner->CodeType = $bc->code39;

$img = new Imagick("test/code-25.gif");
echo "Image Loaded...";

echo "<br />Decoded: " . $scanner->Scan($img, 0, 20, 2048, 0);

答案 2 :(得分:0)

使用php库imagick结合zbar和作曲家库“ robbiep / zbar-qrdecoder”:“ ^ 2.0”,我能够获得更好的条形码读取结果。该代码如下,并删除了可能位于条形码后面并阻碍其识别的灰度。干杯!

        $blankAndWhiteFileName = time()."-".rand();
        $imagick = new Imagick($file);
        $imagick->modulateImage(100, 0, 100);
        $imagick->whiteThresholdImage('#a9a9a9');
        $imagick->contrastImage(1);
        $imagick->setImageFormat('jpg');
        $tempFilename = tempnam('/tmp', $blankAndWhiteFileName);
        $blackAndWhite = $imagick->writeImage($tempFilename);
        $ZbarDecoder = new RobbieP\ZbarQrdecoder\ZbarDecoder();
        $result = $ZbarDecoder->make($tempFilename);
        unlink($tempFilename);