1

我想知道如何将一组颜色转换为 png 图像文件。该数组称为$pixels。请帮我。

$im = imagecreatefrompng('start.png');
$background = imagecreatefrompng('background.png');
imageconverttruecolor($background);
imageconverttruecolor($im);
define('x',imagesx($im));
define('y',imagesy($im));
$pixels=array();
for ($x = 0; x>$x;++$x){
for ($y=0;y>$y;++$y){
    $s=imagecolorat($background,$x,$y);
    if ($s&&$s==imagecolorat($im,$x,$y))
    $pixels[$x][$y]=0xFFFFFF;
    else $pixels[$x][$y]=0x000000;
}
}
4

1 回答 1

0

可以,但是您没有提供有关数组结构的太多信息。我建议使用以下内容;

Array $arr = (Array($x, $y, $r, $g, $b), Array($x, $y, $r, $g, $b) ...);

因此,您正在查看一个多维数组,每个嵌入式数组都在存储该数组;

$x = x position of pixel
$y = y position of pixel
$r = red value (0 - 255)
$g = green value (0 - 255)
$b = blue value (0 - 255)

从这里,您可以使用 GD 来绘制图像。为了找到图片的正确高度和宽度,您需要定义一个函数来比较最大 x 和 y 值,并根据数组中找到的最大 x/y 值更新它们。IE;

$max_height = (int) 0;
$max_width = (int) 0;

foreach ($arr as $a)
{
    if ($a[0] > $max_width)
    {
        $max_width = $a[0];
    }
    if ($a[1] > $max_height)
    {
        $max_height = $a[1];
    }
}

所以,现在您已经获得了图像的最大宽度和高度。从这里开始,我们可以通过遍历多维数组来开始构建图像——基本上,一次一个像素。

要实际绘制像素,我们将使用imagesetpixel

$im = imagecreatetruecolor($width, $height);
foreach ($arr as $b)
{
    $col = imagecolorallocate($im, $a[2], $a[3], $a[4]);
    imagesetpixel ($im , $a[0] , $a[1] , $col );
}

现在,一旦我们完成了,剩下要做的就是在浏览器中实际显示图像。

header('Content-type: image/png');
imagepng($im);
imagedestroy($im);

希望这可以帮助。

  • 伊根
于 2012-06-26T02:00:01.650 回答