首页 > 解决方案 > 扫描二维码并使用 p:photoCam 对其进行解码

问题描述

我需要在相机捕获时捕获和读取 QR 码,所有这些都在 JSF 应用程序中。

我已经阅读了照片中的二维码,但现在我必须让它“活着”。

有人有什么建议吗?

我正在尝试使用 PrimeFaces 的 p:photoCam。

方法是这样的,使用Zxing读取二维码:

 /**
   * 
   * @param filePath
   * @param charset
   * @param hintMap
   * 
   * @return Qr Code value 
   * 
   * @throws FileNotFoundException
   * @throws IOException
   * @throws NotFoundException
   */
  public static String readQRCode(String filePath, String charset, Map hintMap)
      throws FileNotFoundException, IOException, NotFoundException {
    BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(
        new BufferedImageLuminanceSource(
            ImageIO.read(new FileInputStream(filePath)))));
    Result qrCodeResult = new MultiFormatReader().decode(binaryBitmap);
    return qrCodeResult.getText();
  }
}

标签: javajsfprimefacescameraqr-code

解决方案


PrimeFaces Extensions 10 将包含一个pe:codeScanner组件,用于从设备摄像头扫描条码和 QR 码。

<pe:codeScanner width="600"
                height="400">
  <p:ajax event="codeScanned"
          listener="#{codeScannerController.onCodeScanned}"/>
</pe:codeScanner>

来源:https ://github.com/primefaces-extensions/primefaces-extensions/blob/master/showcase/src/main/webapp/sections/codeScanner/example-basicUsage.xhtml

public void onCodeScanned(final SelectEvent<Code> event) {
    final Code code = event.getObject();
    FacesContext.getCurrentInstance().addMessage(
                null,
                new FacesMessage(FacesMessage.SEVERITY_INFO,
                            String.format("Scanned: %s (%s)", code.getValue(), code.getFormat()),
                            null));
}

来源:https ://github.com/primefaces-extensions/primefaces-extensions/blob/master/showcase/src/main/java/org/primefaces/extensions/showcase/controller/codescanner/CodeScannerController.java


推荐阅读