0

我在绘制圆形而不是立方体来显示二维码时遇到问题。

这是我绘制立方体的代码,我只绘制一个像素,然后将图像调整为我需要的大小。

    ImageSetPixel($myImageRessource,$x,$y,$myColor);

经过一番研究,我找到了用画笔绘制圆圈的解决方案

            $brush = imagecreatetruecolor(5,5);
            imagefilledellipse($brush,1,1,3,3,$myColor2);
            imagesetbrush($myImageRessource,$brush);
            ImageSetPixel($myImageRessource,$x,$y,$myColor);

以这种方式使用画笔应该绘制一个圆形而不是一个立方体,但事实并非如此。

这就是它应该的样子

这就是它应该的样子

这就是我得到的

这就是我得到的

我看不出这段代码有什么问题。有人可以给我一个建议吗?

4

2 回答 2

1

你只需要使用更大的图像。您真的不能指望任何程序或代码在只有 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");
?>

这将产生以下图像:

指向 stackoverflow.com 的示例 QR 码

于 2013-07-16T09:54:26.117 回答
0

1 像素宽、1 像素高的圆只是一个像素,像素是正方形。如果您想要点,请尝试至少按照您希望显示的大小绘制图像,然后按比例缩小。

于 2013-07-16T09:55:03.453 回答