2009-07-16 11 views
22

Я ищу компонент QR-кода компонента с открытым кодом в java (J2SE), но лицензия с открытым исходным кодом не должна быть лицензией GPL (должна быть включен в проект с близким исходным кодом).QR-код генератора изображений в java (с открытым исходным кодом, но без GPL)

BTW, я не могу получить доступ к веб-сайту из проекта, поэтому API Google не существует.

ответ

26

Mercer - нет, в библиотеке также есть кодировщик. com.google.zxing.qrcode.encoder. Мы предлагаем, что помимо примерного веб-приложения, использующего API диаграмм Google,

+0

ОК спасибо! Мне просто нужно создать изображение с помощью qrCode.getMatrix(). getArray(); – oneeyejack

+7

В случае, если кто-то еще это делает, это основная идея. Используйте Encoder.encode() для «заполнения» деталей недавно созданного QRCode. Затем получите байт [] [] из QRCode.getMatrix(). GetArray(), как было предложено выше. Каждая строка байтов представляет собой строку пикселей для QRCode, причем каждый байт равен нулю или одному. На этом этапе вы можете просто нарисовать пиксели в BufferedImage или сделать из него Растер или что-то, чтобы превратить его в AWT-образ. – CarlG

+11

... или используйте предоставленный класс MatrixToImageWriter, чтобы сделать все это за вас! –

14

ZXing - это многоформатная библиотека обработки изображений штрих-кода 1D/2D с открытым исходным кодом, реализованная на Java. Он выпущен под лицензией . Лицензия Apache, поэтому позволяет использовать исходный код для разработки проприетарного программного обеспечения, а также бесплатное программное обеспечение с открытым исходным кодом.

+1

Не генерирует QR-коды. Он только сканирует их. –

+2

В своем примере веб-приложения генератора qr они используют http://code.google.com/apis/chart/types.html#qrcodes для генерации кода qr. –

+0

Я не могу получить доступ к веб-сайту из проекта, поэтому нет API-интерфейса Google или веб-службы. – oneeyejack

2

MatrixToImageWriter использует битматрикс, а не ByteMatrix, возвращенный QRCode.getMatrix. глядя на андроид исходный код, я нашел следующее доказательство концепции решения:

try { 
     MultiFormatWriter writer = new MultiFormatWriter();  
     Hashtable hints = new Hashtable(); 
     hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.Q);    
     MatrixToImageWriter.writeToFile(writer.encode("hello world", BarcodeFormat.QR_CODE, 800, 800, hints), 
             "png", new File("/tmp/qrcode.png")); 
    } catch (Exception e) { 
     System.out.println("failure: " + e); 
    } 

кстати навязывания Hashtable в API не является чистым. используйте карту. не многие люди все равно используют Hashtable в любом случае, вы должны почти всегда использовать HashMap (за исключением нескольких случаев использования).

+0

Ответ на этот очень старый комментарий, который я только что видел: он использовал 'Hashtable' для совместимости с J2ME, у которого нет' Map'. Но так как поддержка v2.0 J2ME была удалена, и API получил «карту». –