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…如果库支持的话。