Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 也许你还记得颜色?_Javascript_Php_Arrays_Canvas - Fatal编程技术网

Javascript 也许你还记得颜色?

Javascript 也许你还记得颜色?,javascript,php,arrays,canvas,Javascript,Php,Arrays,Canvas,我正在尝试创建一个可以在画布上绘制的站点,并将其转换为GIF 到目前为止我成功了,但是我在颜色方面有问题 我解释我的网站是如何工作的: 1) 用户在画布上绘制,并将其保存在数组中的对象中,如下所示: [{x: 1, y:1, radius: 8, color: "blue"}, {x: 2, y:3, radius: 16, color: "red"} ...] 鼠标在画布上的每次移动都是数组中的一个对象 现在我将它作为json发送到php页面,现在在php页面中我有一个预定义的颜色数组,如下

我正在尝试创建一个可以在
画布上绘制的站点,并将其转换为GIF
到目前为止我成功了,但是我在颜色方面有问题 我解释我的网站是如何工作的:

1) 用户在画布上绘制,并将其保存在数组中的对象中,如下所示:

[{x: 1, y:1, radius: 8, color: "blue"}, {x: 2, y:3, radius: 16, color: "red"} ...]
鼠标在画布上的每次移动都是数组中的一个对象

现在我将它作为json发送到php页面,现在在php页面中我有一个预定义的颜色数组,如下所示:

$colors = array(
    'brown' => array(
        165,
        42,
        42
    ),
    'cadetblue' => array(
        95,
        158,
        160
    ),
    'chartreuse' => array(
        127,
        255,
        0
    ),
    'chocolate' => array(
        210,
        105,
        30
    ),
    'coral' => array(
        255,
        127,
        80
    ),
    'crimson' => array(
        220,
        20,
        60
    )
);
到目前为止还不错,现在当我在图像上绘制时,我循环从客户端发送到m的数组中的每个对象,我用php函数创建一个,并绘制填充椭圆,代码:

for ($i = 0; $i <= $j; $i++) {
    $colorName = $model[$i]->color;
    $color = imagecolorallocate($img, $colors[$colorName][0] ,$colors[$colorName][1] , $colors[$colorName][2]);
    imagefilledellipse($img, $model[$i]->x, $model[$i]->y, $model[$i]->radius * 2, $model[$i]->radius * 2, $color);
    }
用于($i=0;$i颜色;
$color=imagecolorallocate($img、$colors[$colorName][0]、$colors[$colorName][1]、$colors[$colorName][2]);
imagefilledellipse($img,$model[$i]->x,$model[$i]->y,$model[$i]->radius*2,$model[$i]->radius*2,$color);
}

现在开始了,但是在画中间突然回到我在网站上画的第一个颜色
我不知道为什么,我看了看我发送到服务器的数据,这个颜色出现在它返回的位置

插图中的图像:

我在网站上画的是:

我得到的结果是:

绘图的完整PHP代码:

发送到服务器的数据:

请注意:
在巧克力色的中间,即使在这个位置发送到服务器的数据中,这个颜色的剂量也会改变, > P> OK,问题解决了,我解释了什么原因,什么是解决方案? 问题是您不能为单个图像创建超过255种颜色
当我在php.net中阅读注释时,我发现了这个注释

请注意,您只能为任何图像调色板分配255种颜色。如果尝试分配更多颜色,imagecolorallocate()将失败

在我的代码中,我创建了超过255种颜色,因为它返回到开始位置

现在,我为每个帧创建6种颜色并使用它们进行绘制,解决的问题是gif限制为256种颜色。您可以尝试以无损真彩色格式保存临时帧,然后将结果转换为gif…如果库支持的话。