如何将存储在文本文件中的十六进制颜色(或 RGB、sRGB)列表转换为图像
How can I convert a list of hex colors (or RGB, sRGB) stored in a text file into an Image
我有一份大约的清单。 1000 种十六进制颜色,我想将其转换为填充有这些颜色的图像(例如正方形或矩形网格)。有没有一种简单的方法可以在 Imagemagick(或任何其他软件:例如 Processing/Python)中实现这一点。
感谢您的帮助
代码在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 并告诉您将问题分解成更小的步骤并尝试一些事情之外,很难回答一般 "how do I do this" 类型的问题。然后,如果您在其中一个特定步骤上遇到困难,您可以提出一个更具体的 "I tried X, expected Y, but got Z instead" 类型的问题,这更符合 Stack Overflow 的设计目的。祝你好运。
我会像这样使用 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
我有一份大约的清单。 1000 种十六进制颜色,我想将其转换为填充有这些颜色的图像(例如正方形或矩形网格)。有没有一种简单的方法可以在 Imagemagick(或任何其他软件:例如 Processing/Python)中实现这一点。
感谢您的帮助
代码在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 并告诉您将问题分解成更小的步骤并尝试一些事情之外,很难回答一般 "how do I do this" 类型的问题。然后,如果您在其中一个特定步骤上遇到困难,您可以提出一个更具体的 "I tried X, expected Y, but got Z instead" 类型的问题,这更符合 Stack Overflow 的设计目的。祝你好运。
我会像这样使用 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