您会记住“旧的”互联网吗? 在出现网络浏览器之前,什么时候所有东西都具有强烈的unix风味? 那时有一种叫做“ ascii art”的东西,就是使用ascii字母来创建图像。 这是一个获取图像(640x384)并将其转换为ascii字符串的程序。 我想为这个图像创建一个
T恤衫您需要将“ courier new”字体从字体目录复制到与脚本相同的目录,并添加一个应转换的图像:
import Image, ImageDraw
import ImageFont
import math
# funny useless program
lu = []
for i in range(125-32):
lu.append(chr(i+33))
i2 = Image.new("RGBA",(64,64))
ii = Image.open("mona.png") # change this to your own picture, but it needs to be 640x384!
im = Image.new("RGBA",(64,64))
d = ImageDraw.Draw(im)
f = ImageFont.truetype("courbi.ttf",13)
str=""
for v in range(24):
print v
for k in range(80):
chr = ""
maxdiff = 0xffffff
for e in lu:
d.rectangle([0,0,64,64], fill=0)
d.text((0,0),e,font=f,fill=0xffffff)
diff = 0
r0 = 0
g0 = 0
b0 = 0
for a in range(16):
for b in range(8):
c = im.getpixel((b,a))[0]
c0 = (ii.getpixel((b+(k*8),a+(v*16)))[0] + ii.getpixel((b+(k*8),a+(v*16)))[1] + ii.getpixel((b+(k*8),a+(v*16)))[2])/3.0
r0+= ii.getpixel((b+(k*8),a+(v*16)))[0]
g0+= ii.getpixel((b+(k*8),a+(v*16)))[1]
b0+= ii.getpixel((b+(k*8),a+(v*16)))[2]
diff+=abs(c-c0)
if(diff < maxdiff):
maxdiff = diff
chr = e
r0*=1.0
g0*=1.0
b0*=1.0
r0/=(16.0*8.0)
g0/=(16.0*8.0)
b0/=(16.0*8.0)
ir0 = int(r0)
ig0 = int(g0)
ib0 = int(b0)
r1 = hex(ir0)
r1 = r1[2:len(r1)]
g1 = hex(ig0)
g1 = g1[2:len(g1)]
b1 = hex(ib0)
b1 = b1[2:len(g1)]
if(chr == " "):
chr=" "
str+="<td width=\"8px\"><font size=\"1px\" color=\"#"+r1+g1+b1+"\">"+chr+"</font></td>"
str="<tr>"+str+"</tr>"
str= "<html><body bgcolor=\"#000000\"><table width=\"640px\" height=\"386px\">"+str+"</table></body></html>"
f = open("mona.txt","w")
f.write(str)
f.close()
该程序将其输出为.html文件,但应该易于修改,因此将输出txt。
-荣誉
From: https://bytes.com/topic/python/insights/874180-program-takes-image-640x384-converts-ascii-strings