Каковы фактические ограничения символов для QR-кодов Google Chart?

Я написал некоторый код, который выводит минимальное количество пикселей, необходимое для размещения QR-кода, соответствующего стандартам, с учетом кодируемых символов, требуемого поля и уровня EC. Однако я получаю пустые ответы от Google вместо действительных QR-кодов.

Наименьший возможный QR-код — это QR-код версии 1 размером 29x29 пикселей (21 закодированный модуль + 4 модуля с каждой стороны). пример

1-символьный QR-код

Согласно документации по QR-коду Google Charts, максимальное количество 0- 9 цифр, которые вы можете иметь в QR-коде версии 1 на уровне ЕС H, равны 17. Однако указание параметров как таковых приводит к пустому изображению; независимо от того, что установлено для параметра choe; потому что кодируется больше данных, чем может поместиться.

Должен быть действительным, но пустым

Уменьшение количества символов до 14 приводит к действительный QR-код.

Для работы необходимо уменьшить цифры

Итак, кто-нибудь знает, сколько данных может быть закодировано API Google Charts для каждой данной версии и уровня EC? Это зависит от символьного байта? Мой код написан на Java, но, если потребуется, решения на любом языке программирования будет достаточно.

Надеюсь, я сделал что-то не так, или есть какая-то логика, которой можно следовать, вместо того, чтобы быть «достаточно хорошей» реализацией QR-кодов.


person nosilleg    schedule 27.05.2012    source источник


Ответы (2)


Официального ответа на это нет. Поскольку API устарел, маловероятно, что когда-либо появится ответ или ошибка будет исправлена. Вместо этого вам лучше использовать zxing, так как он все еще разрабатывается и не страдает от упомянутых проблема.

person nosilleg    schedule 08.09.2012

Размер сгенерированного изображения в пикселях здесь не имеет значения. Все QR-коды, которые вы видите и генерируете, действительны.

QR-код версии 1 может содержать 17 цифр, да, в числовом режиме.

Я думаю, что реализация Chart Server здесь просто неверна. Он использует числовой режим, но добавляет больше байтов заполнения, чем я считаю необходимым, поэтому он использует версию 2.

Версия, которую вы видите в zxing, на самом деле представляет собой тот же базовый код кодировщика, но я думаю, что на самом деле он более актуальнее и, возможно, исправлено, чем эта реализация, которая возникла в 2006 году. (Хотя я не знаю, внутри больше нет.)

UTF-8 действителен, если вы используете сегмент ECI для указания кодировки UTF-8 в байтовом режиме. Но это очень редко делается правильно. zxing поддерживает это.

На практике в QR-коды в байтовом режиме помещаются всевозможные вещи — Shift_JIS, UTF-8 и другие. zxing (и другие) в большинстве случаев угадывают правильно. Сервер диаграмм, насколько мне известно, будет использовать UTF-8, когда это необходимо, потому что он не может быть законно закодирован в ISO-8859-1 по умолчанию. Хотя тут не в этом дело.

Я думаю, что Chart Server на несколько байтов отстает от ограничений, указанных в спецификации. Спецификация ISO 18004:2006. Это дает вам все правильные ограничения для всех версий, режимов и уровней EC.

AFAIK zxing делает это правильно, и это Java.

person Sean Owen    schedule 27.05.2012
comment
Ваши полномочия наводят меня на мысль, что вряд ли я получу лучший ответ, чем ваш. К сожалению, он не предоставляет информацию, которую я искал. Пиксели важны для того, чтобы показать, что изображение должно отображаться. И все приведенные выше qr-коды должны быть действительными, но это не так. 1 пустое и 2 сглаженных изображения не являются допустимыми qr-кодами. Я использовал данные из спецификаций, но по-прежнему получаю пустые изображения или изображения неправильного размера из Google в том, что должно быть в разных режимах. Я надеялся, что кто-нибудь может рассказать мне правила Google, а не спецификацию. Теперь API устарел, думаю, вместо этого я должен просто использовать zxing. - person nosilleg; 28.05.2012
comment
К вашему сведению: только что обнаружил, что только приведенный выше код 1 qr недействителен, сглаживание было вызвано тем, что мой Chrome был увеличен на один уровень, что, по-видимому, является единственным уровнем увеличения, на котором код становится непригодным для использования. - person nosilleg; 28.05.2012
comment
Я не получаю пустое изображение по вашей ссылке и никогда не получаю псевдонимы. Сервер диаграмм не сглаживает эти AFAIK. Я тоже использую Хром. Я предполагаю, что это проблема с локальными настройками / сетью. Вы не найдете задокументированных правил, так как они должны соответствовать спецификации. Я знаю, что код устарел, и не ожидаю, что в него вернутся исправления от zxing, поэтому не удивлюсь, если он будет отклоняться на байт или два. На самом деле я помню, что давным-давно исправлял что-то подобное. Но, в основном, по моему опыту, Chart Server работает корректно. Не помните каких-либо существенных ошибок. - person Sean Owen; 28.05.2012
comment
Извините, я удалил несколько примеров кодов двойного размера (58x58) в своем вопросе перед публикацией, однако эта ссылка все еще указывала на изображение двойного размера. Таким образом, эта ссылка показывала QR-код версии 2, а не версию 1, как должно быть. Я исправил ссылку, которая теперь отражает пустое изображение в моем вопросе. См. мой предыдущий комментарий о проблеме сглаживания, которая была настройкой браузера. Надеюсь, теперь стало ясно, что Google Chart API для QR-кодов не работает или, по крайней мере, не является стандартным, поэтому я хочу знать, как он на самом деле работает. - person nosilleg; 28.05.2012
comment
Да, я вижу это сейчас. 29 x 29 слишком малы для кодирования QR-кода версии 2, для которого требуется 33 x 33 (с тихой зоной). Итак, вернемся к тому же вопросу. Я думаю, что это довольно мелкая ошибка. QR-коды полностью действительны, у них просто есть 1 дополнительный байт заполнения. zxing должен работать нормально для вас. - person Sean Owen; 28.05.2012