Réduire la largeur de la bordure sur les QR Codes générés par ZXing?
Je suis en utilisant com.google.zxing.qrcode.QRCodeWriter
pour coder les données et com.google.zxing.client.j2se.MatrixToImageWriter
pour générer le QR Code de l'image. Sur un 400x400 image, il y a environ 52 pixels de large bordure autour du code. J'aimerais que cette frontière pour être plus étroite, peut-être 15 pixels, mais je ne vois rien dans l'API pour le faire. Ai-je raté quelque chose dans la documenation? Ou aurais-je besoin de traiter l'image de moi-même?
Pour référence, voici un exemple 400x400 QR Code de produit avec la bibliothèque ZXing:
Vous devez vous connecter pour publier un commentaire.
Le QR spec nécessite un module de quatre zone tranquille et c'est ce que zxing crée. (Voir
QUIET_ZONE_SIZE
dans QRCodeWriter.renderResult.)Les versions plus récentes de ZXing vous permettent de définir la taille de la zone tranquille (essentiellement les intrinsèque rembourrage du QR code) par la fourniture d'une valeur int avec le
EncodeHintType.MARGE
clé. Il suffit d'inclure dans les conseilsMap
vous offre à laWriter
'sencode(...)
méthode, par exemple:Si vous changer cela, vous risquez de l'abaissement de la décoder les taux de réussite.
Même par la mise en
EncodeHintType.MARGIN
à0
, l'algorithme de convertir le QRCode "dot" de la matrice de pixels de données peut générer une petite marge (l'algorithme d'appliquer un constant nombre de pixels par points, donc la marge de la taille de pixel est le reste de la division entière de la taille des pixels par QR-Code taille de point).Cependant, vous pouvez désactiver complètement ce "point de pixel" génération: vous calculez le QRCode à matrice de points directement en appelant le public
com.google.zxing.qrcode.encoder.Encoder
classe, et de générer les pixels de l'image de vous-même. Le Code ci-dessous:La conversion de la
BufferedImage
PNG données est laissé comme exercice au lecteur. Vous pouvez également redimensionner l'image en définissant un nombre fixe de pixels par points.Il est généralement plus optimisé de cette façon, l'image générée est la taille la plus petite possible. Si vous comptez sur le client à l'échelle de l'image (w/o flou), vous n'avez pas besoin de plus de 1 pixel par point.
if (matrix.get(x, y) == 0) { rgbArray[i] = 0xFFFFFF; } i++;
pour obtenir un résultat similaire à la Zxing un.aucune marge
Mise à JOUR
Ajouter des dépendances (de commentaires)
Dans swift vous pouvez: