随机图像生成器


14

我正在生成随机数据,并尝试使用将其转换为PNG图像:

head -c 1MB < /dev/urandom | hexdump -e '16/1 "_x%02X"' | sed 's/_/\\/g; s/\\x  //g; s/.*/    "&"/' | tr -d "\"" | display -depth 8 -size 1000x1000+0 rgb:-

此命令始终显示带有某些RGB像素的灰色图像。我究竟做错了什么 ?

我的最终目标是至少生成一张包含随机数据的图像。


定义“随机”。毕竟,一堆随机RGB值的视觉平均值趋向于灰色。
通配符

这就是我的想法,但是由于每张图片看起来都差不多,因此我无法证实这一理论。
pxoto

15年前,我在Basic中做了类似的事情(具体来说是Chipmunk Basic)。我有一个小的图形窗口,并一直将随机颜色的像素输出到随机位置。结果是不断变化的图像在整个时间上看起来基本相同,就像老式电视上的静态色彩一样。它不是真正的灰色,而是静态的
2016年

我设法生成了一些静态图像,但是图像大部分仍然是灰色的。
pxoto

Answers:


17

首先,您需要提供display RGB:-原始字节,而不是像使用该hexdump | sed | tr管道构建的那样编码的十六进制字符串。

其次,您没有给它足够的字节:每个像素需要3个字节,每个颜色通道一个。

这就是您想要的:

mx=320;my=256;head -c "$((3*mx*my))" /dev/urandom | display -depth 8 -size "${mx}x${my}" RGB:-

要直接保存到PNG,您可以执行以下操作:

mx=320;my=256;head -c "$((3*mx*my))" /dev/urandom | convert -depth 8 -size "${mx}x${my}" RGB:- random.png

这是一个典型的输出图像:

从/ dev / urandom生成的RGB图像


如果您想制作动画,则无需创建和保存单个帧。您可以将原始字节流直接馈送到ffmpeg / avconv,例如

mx=320; my=256; nframes=100; dd if=/dev/urandom bs="$((mx*my*3))" count="$nframes" | avconv -r 25 -s "${mx}x${my}" -f rawvideo -pix_fmt rgb24 -i - random.mp4

我不敢相信您实际上解决了它,我将研究该命令以弄清楚它是如何工作的。
pxoto
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.