Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在php中读取/解码图像中的条形码_Javascript_Php_Html_Barcode - Fatal编程技术网

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

Javascript 在php中读取/解码图像中的条形码,javascript,php,html,barcode,Javascript,Php,Html,Barcode,我正在考虑建立一个13位数的EAN条形码扫描仪,它可以在移动设备上的网络上工作,并将使用设备摄像头拍摄条形码图像进行扫描和解码。我不想通过本地应用程序来实现这一点,因为我更愿意让这成为我本地网站搜索体验的一部分。例如,手机上的网站访问者将被提示扫描条形码,而无需打开应用程序 该脚本在桌面上运行良好,并使用Navigator.getUserMedia属性在JavaScript中完成所有这一切,但Android中的支持才刚刚开始,IOS上的支持也不存在 因此,我想知道我是否可以改为支持移动设备,这是

我正在考虑建立一个13位数的EAN条形码扫描仪,它可以在移动设备上的网络上工作,并将使用设备摄像头拍摄条形码图像进行扫描和解码。我不想通过本地应用程序来实现这一点,因为我更愿意让这成为我本地网站搜索体验的一部分。例如,手机上的网站访问者将被提示扫描条形码,而无需打开应用程序

该脚本在桌面上运行良好,并使用Navigator.getUserMedia属性在JavaScript中完成所有这一切,但Android中的支持才刚刚开始,IOS上的支持也不存在

因此,我想知道我是否可以改为支持移动设备,这是我尝试做的全部工作,而不是在浏览器中读取条形码,拍摄条形码照片,通过Ajax将其发送到服务器,让服务器解码图像并将响应发送回网页


通过这种方法,我知道有些python脚本可以读取条形码,例如,是否有PHP等价物?

使用BarBara条形码库:

官方网站:

下载php源代码:

测试:

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);
错误报告(E_ALL);
ini设置(“显示错误”,1);
需要一次“barcode.php”;
$bc=新条码;
$scanner=新的条形码扫描;
$bc->load(“barcode.js”);
回显“已加载词典…”;
$scanner->Codecs=$bc;
回声“测试”;
//手动设置代码类型
$scanner->CodeType=$bc->code39;
$img=new-Imagick(“test/code-25.gif”);
回显“图像加载…”;
回波“
已解码:”$扫描仪->扫描($img,0,20,2048,0);
根据我的经验,是我经过长期研究和多次尝试后发现的最好的一个,其他免费选项包括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码等,也可以读取同一图像中的多个条形码。值得一试

通过使用php库imagick与zbar以及composer库“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);

也许会有所帮助我没有否决投票。然而,70%的准确率是相当糟糕的。@James不一定是老兄,在我的情况下,用粘合剂和条形码在旧纸上扫描70%的10000多张图像是一个极好的比率!它们是旧的DVD盒。如果你得到了完美的扫描图像,如果你按照我上面的答案去做的话,扫描率将接近100%!好的,我没有意识到你扫描的条形码已经损坏/覆盖了一半。但是,我有一个code39条形码,它是由我的PDF格式的其他代码生成的(非常清晰),我用它生成了一张JPG图像。它说,在图像中根本找不到条形码。虽然我的二维码确实有用。其他的条形码扫描器可以很好地读取条形码。好吧,让我收回这一点。我生成了一个新的JPG,只留下条形码(周围没有空格),然后它就可以读取了。然后,我再次展开图像,只填充了一个白色背景,现在看起来效果很好。