Первоначально штрих-коды были одномерным представлением данных с использованием ширины и расстояния между столбцами. Распространенными типами штрих-кодов являются штрих-коды UPC, которые встречаются на упаковках продуктов. Есть также 2D штрих-коды (они все еще называются штрих-кодами, даже если они не используют бары). Типичным примером 2D штрих-кода является QR-код (показан справа), который обычно используется приложениями для мобильных телефонов. Вы можете прочитать историю и больше информации о штрих-кодах в Википедии .
Существует библиотека Java с открытым исходным кодом, называемая zxing (Zebra Crossing), которая может считывать и записывать различные типы форматов штрих-кодов. Я протестировал zxing, и он смог прочитать штрих-код, встроенный в середину занятого текстового документа с оттенками серого 100 dpi!
В этой статье показано, как использовать zxing для чтения и записи штрих-кодов из Java-программы.
Получение библиотеки
Было бы неплохо, если бы банки были где-то размещены в репозитории Maven, но это не планируется делать (см. Выпуск 88 ). Поскольку я не мог найти двоичные файлы, доступные для загрузки, я решил загрузить исходный код и собрать двоичные файлы, что на самом деле было довольно просто.
Исходный код библиотеки доступен в Google Code . На момент написания статьи 1.6 является последней версией zxing.
1. Загрузите файл релиза ZXing-1.6.zip (который содержит в основном исходные файлы) отсюда .
2. Распакуйте файл в локальный каталог.
3. Вам нужно будет собрать 2 файла jar из загруженного источника: core.jar, javase.jar.
Здание core.jar
cd zxing-1.6/core
mvn install
Это установит банку в вашем местном репозитории Maven. Хотя это и не обязательно, вы также можете развернуть его в частном репозитории вашей компании, используя mvn: deploy или вручную загрузив его в репозиторий maven.
Существует также скрипт для сборки фляги.
Здание javase.jar
Повторите ту же процедуру, чтобы получить javase.jar
cd zxing-1.6/javase
mvn install
Включение библиотек в ваш проект
Если вы используете ant, добавьте core.jar и javase.jar в путь к классам вашего проекта.
Если вы используете maven, добавьте следующее в ваш pom.xml.
<dependencies> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>1.6-SNAPSHOT</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>1.6-SNAPSHOT</version> </dependency> <dependencies>
После того, как файлы jar включены в classpath вашего проекта, вы готовы читать и писать штрих-коды из Java!
Чтение штрих-кода с Java
Вы можете прочитать штрих-код, сначала загрузив изображение в качестве входного потока, а затем вызвав этот метод утилиты.
InputStream barCodeInputStream = new FileInputStream("file.jpg"); BufferedImage barCodeBufferedImage = ImageIO.read(barCodeInputStream); LuminanceSource source = new BufferedImageLuminanceSource(barCodeBufferedImage); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Reader reader = new MultiFormatReader(); Result result = reader.decode(bitmap); System.out.println("Barcode text is " + result.getText());
Написание штрих-кода с Java
Вы можете закодировать небольшую текстовую строку следующим образом:
String text = "98376373783"; // this is the text that we want to encode int width = 400; int height = 300; // change the height and width as per your requirement // (ImageIO.getWriterFormatNames() returns a list of supported formats) String imageFormat = "png"; // could be "gif", "tiff", "jpeg" BitMatrix bitMatrix = new QRCodeWriter().encode(text, BarcodeFormat.QR_CODE, width, height); MatrixToImageWriter.writeToStream(bitMatrix, imageFormat, new FileOutputStream(new File("qrcode_97802017507991.png")));
В приведенном выше примере штрих-код для «97802017507991» записывается в файл « qrcode_97802017507991.png » (щелкните, чтобы просмотреть выходные данные).
JavaDocs и документация
Javadocs являются частью загруженного почтового файла. Вы можете найти список поддерживаемых форматов штрих-кодов в Javadocs. Откройте следующий файл, чтобы увидеть Javadocs.
ZXing-1,6 / Docs / Javadoc / index.html