【发布时间】:2016-07-20 09:15:19
【问题描述】:
我有一个大约的列表。 1000 种十六进制颜色,我想将其转换为填充有这些颜色的图像(例如正方形或矩形网格)。有没有一种简单的方法可以在 Imagemagick(或任何其他软件:例如 Processing/Python)中实现这一点。
感谢您的帮助
【问题讨论】:
标签: python imagemagick processing
我有一个大约的列表。 1000 种十六进制颜色,我想将其转换为填充有这些颜色的图像(例如正方形或矩形网格)。有没有一种简单的方法可以在 Imagemagick(或任何其他软件:例如 Processing/Python)中实现这一点。
感谢您的帮助
【问题讨论】:
标签: python imagemagick processing
我会像这样使用bash 和ImageMagick:
while read h; do convert xc:"$h" miff:- ; done < colours | montage -geometry +0+0 miff:- result.png
所以,如果你的文件 colours 看起来像这样:
#000000
#ffffff
#ff0000
#00ff00
#0000ff
pink
yellow
navy
rgb(128,128,128)
rgb(64,64,64)
rgb(200,200,200)
你会得到这个:
如果您希望正方形大于它们当前的 1x1 大小,只需更改 convert 命令以指定正方形的大小,例如 10x10:
while read h; do
convert -size 10x10 xc:"$h" miff:-
done < colours | montage -geometry +0+0 miff:- result.png
【讨论】:
montage -tile 32x ...。同样,如果您希望页面下方有特定数量的图块,例如 20,并且宽度随colours 文件中的行数而变化,您可以使用montage -tile x20 ...
代码在python中 您可以使用以下步骤:
将您的列表转换为 numpy 数组
将 numpy 导入为 np
myarray = np.asarray(mylist)
使用scipy保存刚刚创建的numpy数组
从 scipy.misc 导入到图像
rgb = scipy.misc.toimage(myarray)
toimage(rgb).show()
注意:Scipy 需要预先安装 PIL。
另一种没有Scipy的解决方案如下,但需要根据自己的需要进行修改。你在这里需要 PIL:
import Image
import numpy as np
data = np.random.random((500,500))
#Rescale to 0-255 and convert to uint8
rescaled = (255.0 / data.max() * (data - data.min())).astype(np.uint8)
im = Image.fromarray(rescaled)
im.save('testing.png')
【讨论】:
你已经用processing标签标记了这个,所以这里是处理解决方案:
第 1 步:加载文件。您可以为此使用loadStrings() 函数。这为您提供了一个 String 值数组,在您的情况下,它将保存您的十六进制值。更多信息可以在the reference找到。
第 2 步:遍历这些十六进制值。使用常规的for 循环或增强的for 循环。
第 3 步: 使用 unhex() 函数将每个十六进制 String 转换为 int 颜色。这为您提供了一个int,可以将其传递给任何颜色函数,例如fill()。更多信息可以在the reference找到。
第 4 步:使用这些颜色绘制图像。您还没有说明文件中的行如何映射到屏幕上的坐标,因此您必须进行该映射。然后只需更改填充颜色并在该坐标处绘制一个矩形。
除了将您指向the reference 并告诉您将问题分解为更小的步骤并尝试一些事情之外,很难回答一般的“我该怎么做”类型的问题。然后,如果您卡在其中一个特定步骤上,您可以提出更具体的“我尝试了 X,预期 Y,但得到了 Z”类型的问题,这更像是 Stack Overflow 的设计目的。祝你好运。
【讨论】: