我正在制作一个小网页游戏,我正在寻找一种方法来操纵每个像素的图像并将其存储在mysql数据库中。确切地说,我需要能够做到以下几点:
我已经设法让这件事工作,但效率非常低。我的mysql数据库中有数千条记录,每条记录中都有一个存储有正确位置,颜色和可见性的像素。当图像渲染到屏幕时,需要读出每个记录。
我看过html5画布,但还没有找到正确的方法。实际上,此刻我不知道最好的方法是什么。希望有人可以在这里提供帮助。
答案 0 :(得分:0)
有几种方法可以做到这一点。
是的,帆布就是你想要的。您可以使用画布来处理图像数据(请参阅pixel manipulation with Canvas on the MDN)。
要保存到您的服务器并恢复,您不应该使用数千条记录。您应该使用类似于描述图像的单个base64字符串。 canvas API有一个检索此方法的方法toDataURL()
。
答案 1 :(得分:0)
听起来像你想要的是一个线性同余随机数发生器。它们实际上很少描述(甚至写出!的名称)比编程和使用它们更复杂。他们非常容易使用。
http://en.wikipedia.org/wiki/Linear_congruential_generator
使用这些值,您可以只传递当前seed
值(您选择先设置的像素,或先前设置的像素)到表达式中:
seed = ((seed * multiplier) + increment) % modulus.
选择值如下:
seed
=您的初始值必须大于0且小于模数。
modulus
=图片中的总像素数(即width * height
),在PHP中必须为2 ^ 31或更少。虽然你的代码效率会降低,但它可能会更多一些:下一个大于像素数的2的幂可能是一个不错的选择。
increment
=最简单:" 1"。或者,素数最多为23,622,320,123。或者如果不是那样,那么至少相对具有模数的素数,并且小于(2 ^ 53-(模数*乘数))。
multiplier
:
这种谨慎选择值意味着当你重复种子生成代码modulus
次时,你永远不会得到重复的数字 - 你将半随机地选择"选择"每个像素只有一次。
如果您的modulus
大于width * height
,您有时会在"中选择一个不是"的像素。你的形象:如果你的图像是10x10或100像素,并且你选择了modulus
128(下一个最大功率为2),那么你有机会选择100到127之间的数字。在这种情况下,您可以再次循环,直到获得有效像素,或者只更改更少的像素。
但是如果它从0到99选择了一个像素,那就是要使用的像素。因此,对于10x10图像,37的种子可能意味着第四行,第八像素。
具体做法是:
$pixelX = $seed / $width;
$pixelY = $seed % $width;