Canvas 更改每像素图像并保存到db
我正在制作一个小的网络游戏,我正在寻找一种方法来处理每像素的图像,并将其存储在mysql数据库中。准确地说,我需要能够做到以下几点:Canvas 更改每像素图像并保存到db,canvas,pixel,Canvas,Pixel,我正在制作一个小的网络游戏,我正在寻找一种方法来处理每像素的图像,并将其存储在mysql数据库中。准确地说,我需要能够做到以下几点: 在屏幕上从mysql db加载图像(250 x 250px)(图像不可见,例如每个像素的alpha为0) 随机选取几个像素,将alpha设置为1 将新映像保存在mysql数据库中的旧映像之上 加载可见像素数的新图像 随机选取几个像素,将alpha设置为1; 等等 我已经设法使这件事运作起来了,但效率很低。我的mysql数据库中有数千条记录,每条记录中都有一个位
- 在屏幕上从mysql db加载图像(250 x 250px)(图像不可见,例如每个像素的alpha为0)李>
- 随机选取几个像素,将alpha设置为1李>
- 将新映像保存在mysql数据库中的旧映像之上
- 加载可见像素数的新图像李>
- 随机选取几个像素,将alpha设置为1; 等等
我看过html5画布,但还没有找到正确的方法。实际上,现在我不知道最好的方法是什么。希望有人能帮上忙。有几种方法可以做到这一点 是的,画布就是你想要的。可以使用画布操作图像数据(请参见)
为了保存到服务器和恢复,不应使用数千条记录。您应该使用类似于单个base64字符串的东西来描述您的图像。canvas API有一种检索此数据的方法,称为
toDataURL()
,听起来像是一个线性同余随机数生成器。事实上,它们的描述(甚至写名字!)要比编程和使用复杂得多。它们真的很容易使用
使用这些选项,您可以仅将当前的种子值
传递到表达式中(该值是您首先选择设置的像素,或之前设置的像素):
seed = ((seed * multiplier) + increment) % modulus.
选择以下值:
seed
=初始值必须大于0且小于模数
module
=图像中的总像素数(即,width*height
),在PHP中必须小于等于2^31。虽然代码的效率较低,但它可以稍高一些:下一个大于像素数的2次方可能是一个不错的选择
increment
=最简单的:“1”。或者,一个质数,最多23622320123。或者如果不是这样,则至少用模相对质数,并且小于(2^53-(模*乘数))
乘数
:
- 一个大于一个可被模的所有素数因子整除的数
- 如果模量为4的倍数,则比4的倍数多1倍
- 小于2^22
- 如果你选择一个2的幂的模,那么这个乘法器可以是(小素数*4)+1。所以,5,或9,或其他
模数
大于宽度*高度
,您有时会选择一个不在图像中的像素:如果您的图像为10x10或100像素,您选择的模数
为128(下一个最大幂为2),则您有机会选择100到127之间的数字。在这种情况下,您可以再次循环,直到获得有效像素,或者只更改较少的像素
但是如果它从0到99之间选取一个像素,那就是要使用的像素。所以对于10x10的图像,37的种子可能意味着第四行,第八个像素
具体而言:
$pixelX = $seed / $width;
$pixelY = $seed % $width;
最后的图像保密很重要。如果我在PHP中从mysql获取base64字符串并用javascript将其传递到画布,可以做到这一点吗?我现在就用PHP GD获得了它。有一些小问题,但我认为可以解决。你可以找到脚本