PHP imagesetpixel()停止限制绘制的像素到~250

时间:2012-09-03 11:49:19

标签: php image image-processing pixel pixels

我正在使用imagesetpixel()为字母“x”绘制灰色像素,为字母“o”绘制黑色像素。如果只输入~250或更少的X和O,它工作正常,但是如果输入的数量超过这个数,那么由于某些奇怪的原因,只有第一个~250 X和O被绘制,其余的不是。有谁知道我怎么解决这个问题?

作为旁注,将来我可能希望能够替换我选择的颜色替换其他字母,所以请记住(例如a =红色,b =蓝色,c =绿色,d =橙色等。)。

...
$image = imagecreate($xdim, $ydim);

for(...){
if( $string{$i} == "o" ){
    $color = 0;
} else if( $string{$i} == "x" ){
    $color = 170;
}

imagesetpixel($image, $x, $y, imagecolorallocate($image, $color, $color, $color));

...
}

1 个答案:

答案 0 :(得分:3)

每次调用时,函数imagecolorallocate都会为图像颜色表添加一种颜色 - 此颜色表的颜色限制为255种颜色。

在循环浏览所有字母之前,您要做的是创建对颜色的引用,实际上只为每个字母创建一个颜色引用。

因此,在创建图像后立即分配对不同颜色的引用,然后直接调用这些引用而不是分配新颜色:

...
$image = imagecreate($xdim, $ydim);
$black = imagecolorallocate($image, 0, 0, 0);
$grey = imagecolorallocate($image, 170, 170, 170);

for(...){
    if( $string{$i} == "o" ){
        $color = $black;
    } else if( $string{$i} == "x" ){
        $color = $grey;
    }

    imagesetpixel($image, $x, $y, $color);

    ...
}