【问题标题】:Linux create Image pixel by pixel in command lineLinux在命令行中逐像素创建图像
【发布时间】:2016-10-04 20:06:40
【问题描述】:

有没有办法在 Linux 中创建图像并直接在命令行中逐像素构造它?

我尝试了 imagemagick,但它只能创建一个没有设置像素分隔的空白图像。

有什么想法吗?

【问题讨论】:

  • 是的,但是你的问题很不清楚。请举个例子。你有一个像素 - 从哪里来?你想把它放在哪里?你有多少?为什么不想同时添加它们?

标签: linux image command line pixel


【解决方案1】:

好的,所以我们从红色像素开始:

convert xc:red image.png

我会放大它 - 它相当小。

现在我们得到一个蓝色的并想添加它:

convert image.png xc:blue +append image.png

然后有人给了我们一个RGB像素:

convert image.png xc:"rgb(255,255,0)" +append image.png

现在一些麻烦制造者伴随着 HSL 像素出现:

convert image.png xc:"hsl(120,100,100)" +append image.png

注意不要使用 JPEG,因为它有损。

【讨论】:

  • 这很聪明,对于进行临时可视化的脚本完全有用。在这个方案中如何到达下一行?这是队列模型,但有没有办法通过现有图像中的 x、y 地址转换为“Peek and Poke”颜色?不过,它可能被限制为每秒 5 或 10 个像素。
  • 这比较棘手,并且取决于 OP 未指定的内容。当添加额外的行时,必须有空白/透明像素来填充该行,因为图像是矩形的,因此您需要设置 -background none 并使用 -append 代替 +append....跨度>
  • 如果你想在 x,y 处插入一个蓝色像素,请使用 convert image.png -fill blue -draw "point x,y" image.png
  • 这可能很棒。想一想:以一秒为间隔的磁盘 IO,按颜色缩放。每个文件的 IO,其中每秒添加一行,并带有一个色标,表示文件在一秒或一分钟内看到了多少 IO。网络可视化,其中每列是一个唯一地址(单独存储的密钥),颜色表示通过连接的流量。当有热点时,它在视觉上很明显,随着时间的推移,模​​式会出现。
  • 你也可以用awk或Perl来做这些事情......stackoverflow.com/a/39719293/2836621
【解决方案2】:

您可以使用 shell 脚本来构建 ppm 映像。

echo "P2"
echo "# Column (width) Row (height)"
echo "$1 $1\n1"

t=`expr $1 / 8`
for i in `seq 1 4`; do
    for i in `seq 1 $t`; do
        for i in `seq 1 4`; do
            for i in `seq 1 $t`; do echo -n "1 "; done
            for i in `seq 1 $t`; do echo -n "0 "; done
        done
        echo
    done
    for i in `seq 1 $t`; do
        for i in `seq 1 4`; do
            for i in `seq 1 $t`; do echo -n "0 "; done
            for i in `seq 1 $t`; do echo -n "1 "; done
        done
        echo
    done
done

要运行上面的代码:

$ sh filename.sh 120 > im1.ppm ; eog im1.ppm

结果是: enter image description here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多