你只需要使用更大的图像。您真的不能指望任何程序或代码在只有 2 x 2 像素大的图像中绘制一个圆圈。
尝试更大的东西,比如将图像设置为 5 x 5 像素并使用 2 或 3 的半径。
还有什么理由不直接在最终图像上画圆圈?您应该添加一张图片来向我们展示您想要实现的目标。
因为我对二维码有些兴趣,所以我刚刚编写了这个示例渲染代码:
<?php
$qr = // The actual QR code
"1111111000011010001111111".
"1000001001100010001000001".
"1011101000001000101011101".
"1011101010001100101011101".
"1011101011000100101011101".
"1000001000011110001000001".
"1111111010101010101111111".
"0000000000110011000000000".
"1100011101010111100011000".
"1010000111001001000111110".
"0011111000100111101001011".
"0000000101001010111101001".
"0100111001011011101000001".
"1101000110000101100100010".
"1010111010011111001111011".
"1010100001110011010010101".
"1010111111111111111110100".
"0000000011001001100010100".
"1111111011010010101011001".
"1000001010110011100010011".
"1011101000011111111111100".
"1011101001111111011101011".
"1011101000100110100100101".
"1000001010100010100110001".
"1111111011101000100001001";
$size = 25; // Dimension in dots
$dot = 9; // Pixels per dot
$img = imagecreatetruecolor($size * $dot, $size * $dot);
// Enable alpha blending
imagealphablending($img, true);
imagesavealpha($img, true);
// Allocate colors
$back = imagecolorallocatealpha($img, 0, 0, 0, 127);
$dots = imagecolorallocatealpha($img, 0, 64, 127, 64);
// Fill the image with background/transparency
imagefill($img, 0, 0, $back);
// Loop over all dots and draw them:
for ($y = 0, $i = 0; $y < $size; $y++) {
for ($x = 0; $x < $size; $x++, $i++) {
if ($qr[$i] == '1') { // Draw a dot?
// Draw rectangles
//imagefilledrectangle($img, $x * $dot, $y * $dot, ($x + 1) * $dot - 1, ($y + 1) * $dot - 1, $dots);
// Draw circles
imagefilledellipse($img, ($x + .5) * $dot), ($y + .5) * $dot, $dot - 1, $dot - 1, $dots);
// Draw a second set of circles for more aliased dots
imagefilledellipse($img, ($x + .5) * $dot, ($y + .5) * $dot, $dot - 2, $dot - 2, $dots);
}
}
}
// Save the result
imagepng($img, "qr.png");
?>
这将产生以下图像: