바코드 및 QR 코드 스캔을 위한 Java 명령줄, GUI 및 웹 앱

previous article 에서 Java 및 Dynamsoft Barcode Reader 을 사용하여 명령줄 바코드 및 QR 코드 스캐닝 응용 프로그램을 구성하는 방법에 대해 설명했습니다. 이 기사에서는 데스크톱 GUI 응용 프로그램 및 웹 응용 프로그램과 같은 더 멋진 응용 프로그램을 만들 것입니다. 또한 Dynamsoft Barcode Reader와 비교하기 위해 SDKZXing를 가져올 것입니다.

SDK 버전


  • ZXing v3.4.0

  • Dynamsoft Barcode Reader v9.0

    SDK를 활성화하려면 here을 클릭하여 유효한 라이선스 키를 받아야 합니다.

  • 메이븐 구성



    pom.xml 파일에서 종속성을 구성합니다.

    <repositories>
            <repository>
                <id>dbr</id>
                <url>https://download2.dynamsoft.com/maven/dbr/jar</url>
            </repository>
    </repositories>
    <dependencies>
            <dependency>
                <groupId>com.dynamsoft</groupId>
                <artifactId>dbr</artifactId>
                <version>9.0.0</version>
            </dependency>
            <dependency>
                <groupId>com.google.zxing</groupId>
                <artifactId>core</artifactId>
                <version>3.4.0</version>
              </dependency>
    </dependencies>
    


    테스트 이미지



    테스트 이미지에는 여러 개의 바코드와 QR 코드가 포함되어 있습니다.



    바코드 및 QR 코드 스캔을 위한 다양한 Java 애플리케이션



    명령줄, GUI 및 웹 애플리케이션에서 ZXing 및 Dynamsoft Barcode Reader가 어떻게 작동하는지 살펴보겠습니다.

    명령줄 애플리케이션



    새 Maven 프로젝트를 만듭니다.

    mvn archetype:generate -DgroupId=com.java.barcode -DartifactId=app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
    


    ZXing 및 Dynamsoft Barcode Reader 가져오기:

    import com.dynamsoft.dbr.*;
    import com.google.zxing.BinaryBitmap;
    import com.google.zxing.MultiFormatReader;
    import com.google.zxing.NotFoundException;
    import com.google.zxing.RGBLuminanceSource;
    import com.google.zxing.Result;
    import com.google.zxing.common.HybridBinarizer;
    import com.google.zxing.multi.*;
    


    ImageIO 및 BufferedImage로 이미지 파일을 디코딩합니다.

    import java.awt.image.*;
    import javax.imageio.ImageIO;
    
    BufferedImage image = null;
    try {
        image = ImageIO.read(new File(filename));
    } catch (IOException e) {
        System.out.println(e);
        return;
    }
    


    ZXing에서 서로 다른 바코드 기호로 인코딩된 여러 바코드를 읽으려면 MultiFormatReaderGenericMultipleBarcodeReader를 사용해야 합니다. BufferedImageBinaryBitmap로 변환해야 합니다.

    BinaryBitmap bitmap = null;
    int[] pixels = image.getRGB(0, 0, image.getWidth(), image.getHeight(), null, 0, image.getWidth());
    RGBLuminanceSource source = new RGBLuminanceSource(image.getWidth(), image.getHeight(), pixels);
    bitmap = new BinaryBitmap(new HybridBinarizer(source));
    
    MultiFormatReader reader = new MultiFormatReader();  
    GenericMultipleBarcodeReader multiReader = new GenericMultipleBarcodeReader(reader);
    try {
        Result[] zxingResults = multiReader.decodeMultiple(bitmap);
    } catch (NotFoundException e) {
        e.printStackTrace();
    }
    pixels = null;
    bitmap = null;
    


    반대로 Dynamsoft Barcode Reader API 호출은 BufferedImage를 입력 매개변수로 지원하기 때문에 훨씬 간단합니다.

    BarcodeReader br = null;
    try {
        br = new BarcodeReader("LICENSE-KEY");
    } catch (Exception e) {
        System.out.println(e);
        return;
    }
    
    TextResult[] results = null;
    try {
        results = br.decodeBufferedImage(image, "");
    } catch (Exception e) {
        System.out.println("decode buffered image: " + e);
    }
    


    Java 프로그램을 터미널에서 편리하게 실행하기 위해 maven-assembly-plugin을 사용하여 모든 종속성을 하나의 jar 파일로 어셈블합니다.

    <build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
    </plugins>
    </build>
    


    Maven 프로젝트를 빌드하고 애플리케이션을 실행합니다.

    mvn clean install assembly:assembly -Dmaven.test.skip=true
    java -cp target/command-line-1.0-SNAPSHOT-jar-with-dependencies.jar com.java.barcode.App ..\images\AllSupportedBarcodeTypes.png
    




    ZXing은 8개의 결과만 반환하는 반면 Dynamsoft Barcode Reader는 18개의 결과를 반환합니다.

    Java Swing으로 구축된 데스크탑 GUI 애플리케이션



    위에서 만든 명령줄 Java 프로그램을 기반으로 Swing 클래스를 추가하여 명령줄 앱을 GUI 앱으로 전환할 수 있습니다.

    관련 클래스를 가져옵니다.

    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JComboBox;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    import javax.swing.filechooser.FileNameExtensionFilter;
    
    import java.awt.BorderLayout;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    


    필요한 위젯에는 JTextArea , JButton , JFileChooserJComboBox가 포함됩니다.
  • JTextArea: 결과를 표시합니다.
  • JButton: 클릭 이벤트를 트리거합니다.
  • JFileChooser: 디스크 드라이브에서 이미지 파일을 선택합니다.
  • JComboBox: ZXing과 Dynamsoft Barcode Reader를 전환합니다.

  • 모든 위젯으로 레이아웃을 초기화합니다.

    public App() {
        super(new BorderLayout());
    
        mFileChooser = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter(
                ".png", "png");
        mFileChooser.setFileFilter(filter);
        mLoad = new JButton("Load File");
        mLoad.addActionListener(this);
    
        mSourceList = new JComboBox(new String[]{"ZXing", "Dynamsoft"});
        mSourceList.setSelectedIndex(0);
    
        JPanel buttonPanel = new JPanel(); 
        buttonPanel.add(mSourceList);
        buttonPanel.add(mLoad);
        add(buttonPanel, BorderLayout.PAGE_START);
    
        mTextArea = new JTextArea();
        mTextArea.setSize(480, 480);
        JScrollPane sp = new JScrollPane(mTextArea); 
        add(sp, BorderLayout.CENTER);
    }
    


    버튼 클릭 이벤트가 발생하면 바코드 및 QR 코드를 인식하기 위한 이미지를 로드할 수 있습니다.

    public void actionPerformed(ActionEvent e) {
    
        int returnVal = mFileChooser.showOpenDialog(App.this);
    
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = mFileChooser.getSelectedFile();     
            String filename = file.toPath().toString();          
            if (mSourceList.getSelectedItem().toString().equals("Dynamsoft")) {
                TextResult[] results = decodefileDynamsoft(filename);
            }
            else {
                Result[] results = decodefileZXing(filename);
            }
        } 
    }
    


    Java GUI 애플리케이션을 빌드하고 실행합니다.

    mvn clean install assembly:assembly -Dmaven.test.skip=true
    java -cp target/gui-1.0-SNAPSHOT-jar-with-dependencies.jar com.java.barcode.App
    




    드롭다운 목록으로 ZXing과 Dynamsoft Barcode Reader를 전환할 수 있습니다.

    Java Spring Boot로 구축된 웹 애플리케이션



    Spring Boot는 웹 애플리케이션을 개발하는 데 사용됩니다. 공식tutorial을 따라 간단한 웹 앱을 시작할 수 있습니다.

    서버 측 Java 바코드 API를 빠르게 테스트하기 위해 다음 종속성을 추가하여 swagger-ui를 Spring Boot 앱에 통합할 수 있습니다.

    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-core</artifactId>
        <version>1.1.45</version>
        <exclusions>
            <exclusion>
                <groupId>io.github.classgraph</groupId>
                <artifactId>classgraph</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-ui</artifactId>
        <version>1.1.45</version>
    </dependency>
    


    그런 다음 ZXing 및 Dynamsoft Barcode Reader에 대한 POST 매핑을 포함하는 컨트롤러를 생성합니다.

    @RestController
    public class BarcodeController {
    
        private DynamsoftBarcode mDynamsoftBarcode;
        private ZXingBarcode mZXingBarcode;
    
        @Autowired
        public BarcodeController(DynamsoftBarcode dynamsoft, ZXingBarcode zxing) 
        {
            mDynamsoftBarcode = dynamsoft;
            mZXingBarcode = zxing;
        }
    
        @PostMapping(value = "/api/dynamsoft"
                , consumes = MediaType.MULTIPART_FORM_DATA_VALUE
                , produces = MediaType.APPLICATION_JSON_VALUE)
        public BarcodeResponse getDynamsoft(@RequestPart MultipartFile file) throws Exception {
            return mDynamsoftBarcode.decode(file.getOriginalFilename(), file.getInputStream());
        }
    
        @PostMapping(value = "/api/zxing"
                , consumes = MediaType.MULTIPART_FORM_DATA_VALUE
                , produces = MediaType.APPLICATION_JSON_VALUE)
        public BarcodeResponse getZXing(@RequestPart MultipartFile file) throws Exception {
            return mZXingBarcode.decode(file.getOriginalFilename(), file.getInputStream());
        }
    }
    


    마지막으로 다음과 같이 Spring Boot 앱을 빌드하고 실행합니다.

    mvn clean install
    java -jar target/web-1.0-SNAPSHOT.jar
    


    이제 http://localhost:8080/swagger-ui.html을 방문하여 POST 이벤트를 통해 ZXing 및 Dynamsoft Barcode Reader를 테스트하십시오.



    소스 코드



    https://github.com/yushulx/java-barcode-command-gui-web

    좋은 웹페이지 즐겨찾기