我想在图像上放置随机点(空间中的星星用于一些有趣的小项目)
我有这个简单的脚本。
<?php
$gd = imagecreatetruecolor(1000, 1000);
$white = imagecolorallocate($gd, 255, 255, 255);
for ($i = 0; $i < 100000; $i++)
{
$x = rand(1,1000);
$y = rand(1,1000);
imagesetpixel($gd, round($x),round($y), $white);
}
header('Content-Type: image/png');
imagepng($gd);
?>
请记住,这仅用于测试,这就是为什么我将100000置于for
循环中,以便显示我注意到的模式。我们有100万像素使用,仍然随机X和Y创建此模式:
所以它远非随意。我知道rand不是真正随机的,这就是为什么它对密码学不好。但我找不到有关它如何工作的信息,我应该怎么做以避免这样的模式。
答案 0 :(得分:8)
线性同余随机数生成器(这是PHP rand
使用的)将始终在x-y图上显示自相关效应。
mt_rand
您将获得更好的结果。这是Mersenne Twister发电机。
答案 1 :(得分:1)
最放心:从PHP 7.1.0开始,rand()使用与mt_rand()相同的随机数生成器。
这仅是PHP <7.1 see the Docs
的问题