从图像解码二维码(或如何循环运行 Exec)

从图像解码二维码(或如何循环运行 Exec)

我需要从图像文件中解码一个装满二维码的文件夹。经过大量研究,我终于找到了一个可以在 Windows 上运行的库。这不是我的理想选择(Zbar 无法安装在 Strawberry PERL 上,因为“...不能包含 zbar 和 zbar.h”... 或者在我的在线帐户上,它说需要一个可以运行的 C: 编译器。其他选项多年没有更新,或者需要其他库,例如 DecodeQR 需要 OpenCV/编译器等,或者 libdecodeqr,我认为它需要一个编译器而不是 Windows/Perl)

别担心:问题马上就会出现。

至少 Windows 版 Zbar 似乎包含在单个(可移植:路径相关)文件夹中,尽管我不知道安装程序是否将文件放在注册表中。我应该在此时补充一点 - 如果基于 Windows - 该程序将传递给其他人使用。如果我可以获得一个在服务器上运行的版本,那么我必须安装什么文件并不重要......只要它们能工作!)

反正 ...

这是通过 VBScript 执行的。我设法将图像文件放入文件夹对象中,然后重复执行。这是我的代码:

For Each f in PicFiles
   Set out=objShell.Exec("C:\EventProc\Zbar\bin\zbarimg -D -q " &f)
   tmp=out.StdOut.ReadAll
   MsgBox(tmp)
Next  

在 Zbar 的说法中,标志的意思是(-D:不显示解码的条形码图像)和(-q:仅将解码的输出显示到控制台窗口)

目前,这种安排意味着控制台窗口在每次循环时都会闪现打开并再次快速关闭。(直到关闭后,shell 才会将值发布到 Stdout)在浏览 200 多个图像文件时,这可能会“相当烦人”!

我确实尝试过“Run”而不是“Exec”,但当然它不会向 Stdout 或变量返回任何值!

我尝试在“&f”后添加“,0”以尝试创建一个隐藏窗口...但是 a) 它要么将其视为文件名的一部分并且无法呈现 - 或 - b) 因为它是隐藏的,所以无论如何都不会向 StdOut 报告任何值,tmp 字符串为空白。

以下是我想要实现的目标:

Open a file, and get DetailsA
   Read folder of images
        For
        "decodeQR" is code within image (ideally silently)
        Next
 Append "decodedQR |DetailsA" to an external file 

** 我打开/写入文件没有问题。问题是闪烁的窗口 - 除非有完全不同的选项

答案1

我设法把它整理好了。我不需要使用“for next”循环;我只是将文件引用设为通配符,然后它会扫描文件夹中的所有 jpg 图像。然后我获取 XML 数据,并通读以找到我写入文件的 pic/QR 码的文件名。

有一个问题。由于 exec,您无法隐藏控制台窗口。

以下是使用的 Zbarimg 代码:

xml_data=createobject("wscript.Shell").exec("C:\MobiEvent\Zbar\bin\zbarimg -D -q --xml C:\MobiEvent\AllPics\*.jpg").stdout.readall
test=Split(xml_data,vbLf)

-D 停止显示条形码图像,-q 输出基本信息,-xml 将 XML 数据导出到 STDOUT,然后输入到“xml_data”,然后将其拆分成一个数组,我逐行查看它以找到写入文件的二维码参考/图像文件名。

相关内容