바코드 및 QR 코드 스캔을 위한 Java 명령줄, GUI 및 웹 앱
27089 단어 springbootjavaguiqrcode
SDK 버전
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에서 서로 다른 바코드 기호로 인코딩된 여러 바코드를 읽으려면
MultiFormatReader
및 GenericMultipleBarcodeReader
를 사용해야 합니다. BufferedImage
를 BinaryBitmap
로 변환해야 합니다.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
, JFileChooser
및 JComboBox
가 포함됩니다.모든 위젯으로 레이아웃을 초기화합니다.
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
Reference
이 문제에 관하여(바코드 및 QR 코드 스캔을 위한 Java 명령줄, GUI 및 웹 앱), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yushulx/java-command-line-gui-and-web-apps-for-scanning-barcode-and-qr-code-h5p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)