为字母python中的5个字母的每个组合指定一种颜色

时间:2017-11-16 04:43:36

标签: python encoding

好的,这很复杂。 因此,我尝试创建一个程序,该程序接收大量文本,然后将其转换为图像,每种颜色代表5个字母的字母。我已经创建了这样的程序,它使用字典为每个字母分配颜色。现在,我想用5个字母作为一种颜色。 是的,这是可能的。 26 ^ 5 = 11881376< 255 ^ 3 = 16581375(RGB最多255个,3个变量) 我想知道是否有某种算法可以在给定5个字母的字符串的情况下始终创建唯一的颜色。 例如" aaaaa"将等于(234,164,143)或其他什么,但" aaaab"等于(251,125,53),但我不想使用字典,因为字典会很大。

为了更好地展示我的想法,这是旧编码器的想法。

import numpy as np
import scipy.misc as smp
from encodingtext import *
data = np.zeros((500,500,3), dtype=np.uint8)
alphabet={" ":(255,255,255),"a":(255,255,120),"b":(255,255,80),"c":(255,255,0),
    "d":(255,25,255),"e":(255,0,78),"f":(89,210,37),"g":(92,2,27),"h":(0,255,0),
    "i":(0,0,255),"j":(130,255,9),"k":(176,0,255),"l":(255,36,0),"m":(58,54,58),
    "n":(4,236,42),"o":(91,83,90),"p":(59,182,78),"q":(86,54,89),"r":(0,0,79),
    "s":(0,80,0),"t":(50,11,99),"u":(255,23,78),"v":(0,67,1),"w":(255,0,127),
    "x":(252,0,120),"y":(94,83,52),"z":(13,59,214),"\n":(34,125,4),";":(2,7,123)}
t = list(text)
x = 0
y = 0
for i,j in enumerate(t):
    data[x,y] = alphabet[t[i]]
    if x == 400:
        x = 0
        y += 1
    else:
        x += 1
img = smp.toimage(data)
img.show()

"来自encodingtext import *"只需导入一个python文件,该文件具有变量" text ='''一些非常长的文字''' "

这是解码器:

from PIL import Image
import sys
im = Image.open('titin.png')
rgb_im = im.convert('RGB')
word = ''

reverse = {(255, 23, 78): 'u', (130, 255, 9): 'j', (59, 182, 78): 'p',
    (94, 83, 52): 'y', (0, 67, 1): 'v', (255, 255, 80): 'b', (0, 80, 0): 's',
    (58, 54, 58): 'm', (255, 0, 78): 'e', (176, 0, 255): 'k', (255, 0, 127): 'w',
    (34, 125, 4): '\n', (0, 0, 79): 'r', (255, 255, 0): 'c', (50, 11, 99): 't',
    (92, 2, 27): 'g', (252, 0, 120): 'x', (255, 255, 255): ' ', (0, 0, 255): 'i',
    (2, 7, 123): ';', (4, 236, 42): 'n', (255, 25, 255): 'd', (86, 54, 89): 'q',
    (255, 36, 0): 'l', (13, 59, 214): 'z', (91, 83, 90): 'o',
    (255, 255, 120): 'a', (0, 255, 0): 'h', (89, 210, 37): 'f',(0,0,0):''
}
x = 0
y = -1
for i in range(250000):
    if y == 490:
        y = 0
        x += 1
    if x == 400:
        break
    else:
        y += 1
    r, g, b = rgb_im.getpixel((x, y))
    word += reverse[(r,g,b)]
print(word)

因此,当给i386 System V ABI作为encodingtext.py时,它会返回图像https://pastebin.com/puuhGB1j,但每种颜色只有1个字母,而它可能会缩短5倍。

0 个答案:

没有答案