【问题标题】:How can I convert a list of hex colors (or RGB, sRGB) stored in a text file into an Image如何将存储在文本文件中的十六进制颜色(或 RGB、sRGB)列表转换为图像
【发布时间】:2016-07-20 09:15:19
【问题描述】:

我有一个大约的列表。 1000 种十六进制颜色,我想将其转换为填充有这些颜色的图像(例如正方形或矩形网格)。有没有一种简单的方法可以在 Imagemagick(或任何其他软件:例如 Processing/Python)中实现这一点。

感谢您的帮助

【问题讨论】:

    标签: python imagemagick processing


    【解决方案1】:

    我会像这样使用bashImageMagick

    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
    

    【讨论】:

    • 你是真正的大师。这正是我想要的,一切都在一个班轮中。感谢一百万,非常感谢!
    • 太棒了!很高兴为您服务。顺便说一句,如果你知道你想要的,比如宽度和高度上的 32 个瓷砖,然后由正方形的数量决定,你可以使用montage -tile 32x ...。同样,如果您希望页面下方有特定数量的图块,例如 20,并且宽度随colours 文件中的行数而变化,您可以使用montage -tile x20 ...
    • 再次感谢!我想知道是否可以在打印之前对颜色进行排序,这样相似的颜色就会彼此接近。这个脚本非常有用。再次感谢。
    • 你可以做那种事情 - 在这里查看我的答案stackoverflow.com/a/34808744/2836621 你可以将此答案中的图像作为输入图像传递给链接的答案。
    • @MarkSetchell 是否可以将颜色名称添加到框中?我正在使用来自 showrgb 命令的名称。我尝试使用标签和标题,文本显示,但一切都变成黑白
    【解决方案2】:

    代码在python中 您可以使用以下步骤:

    1. 将您的列表转换为 numpy 数组

      将 numpy 导入为 np

      myarray = np.asarray(mylist)

    2. 使用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')
    

    【讨论】:

      【解决方案3】:

      你已经用标签标记了这个,所以这里是处理解决方案:

      第 1 步:加载文件。您可以为此使用loadStrings() 函数。这为您提供了一个 String 值数组,在您的情况下,它将保存您的十六进制值。更多信息可以在the reference找到。

      第 2 步:遍历这些十六进制值。使用常规的for 循环或增强的for 循环。

      第 3 步: 使用 unhex() 函数将每个十六进制 String 转换为 int 颜色。这为您提供了一个int,可以将其传递给任何颜色函数,例如fill()。更多信息可以在the reference找到。

      第 4 步:使用这些颜色绘制图像。您还没有说明文件中的行如何映射到屏幕上的坐标,因此您必须进行该映射。然后只需更改填充颜色并在该坐标处绘制一个矩形。

      除了将您指向the reference 并告诉您将问题分解为更小的步骤并尝试一些事情之外,很难回答一般的“我该怎么做”类型的问题。然后,如果您卡在其中一个特定步骤上,您可以提出更具体的“我尝试了 X,预期 Y,但得到了 Z”类型的问题,这更像是 Stack Overflow 的设计目的。祝你好运。

      【讨论】:

      • 非常感谢。我不知道为什么这样一个简洁的问题会被否决。为什么会发生这种情况的原因是随机的,如果有人努力投票否决某事,他/她必须解释原因,那就太好了。否则没有人能从这次经历中学到任何东西。
      • @user413734 请参阅我的答案底部,了解为什么您会被否决。长话短说:这个问题简洁。我很乐意笼统地回答,但这并不是 Stack Overflow 的初衷。
      猜你喜欢
      • 2016-12-27
      • 2012-07-25
      • 2022-08-10
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 2011-07-30
      • 1970-01-01
      • 2013-07-18
      相关资源
      最近更新 更多