に設定EncodeHintType.MARGIN
しても0
、QRCodeの「ドット」マトリックスをピクセルデータに変換するアルゴリズムは、小さなマージンを生成できます(アルゴリズムはドットごとに一定数のピクセルを強制するため、マージンのピクセルサイズはピクセルサイズの整数除算の残りです。 QRコードドットサイズによる)。
ただし、この「ドットからピクセルへ」の生成を完全にバイパスできます。パブリッククラスを呼び出してQRCodeドットマトリックスを直接計算し、com.google.zxing.qrcode.encoder.Encoder
自分でピクセル画像を生成します。以下のコード:
// Step 1 - generate the QRCode dot array
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>(1);
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
QRCode qrCode = Encoder.encode(what, ErrorCorrectionLevel.L, hints);
// Step 2 - create a BufferedImage out of this array
int width = qrCode.getMatrix().getWidth();
int height = qrCode.getMatrix().getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
int[] rgbArray = new int[width * height];
int i = 0;
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
rgbArray[i] = qrCode.getMatrix().get(x, y) > 0 ? 0xFFFFFF : 0x000000;
i++;
} }
image.setRGB(0, 0, width, height, rgbArray, 0, width);
PNGデータへの変換はBufferedImage
、読者の練習問題として残されています。ドットあたりのピクセル数を固定して、画像を拡大縮小することもできます。
通常、この方法でより最適化され、生成される画像サイズは可能な限り最小になります。画像の拡大縮小をクライアントに依存している場合(ぼかしなし)、ドットあたり1ピクセルを超える必要はありません。