posts - 20,comments - 15,trackbacks - 0
关键字: png bmp txt pil 

下面的代码可以把图像转换成文本, 是从网上的一段程序改的, 本来是想在控制台使用的, 但输出的文本过大, 缩放过小又会造成像素丢失的情况。
先贴出来. 这个版本适用于文件输出, 可以保持更好的显示效果
from PIL import Image
import os
def PngToTxt(f):
    Palette={'000':'#'#榛�
    ,'010':'@'#鏆楃豢
    ,'020':'/'#缁�
    ,'001':'$'#娣辫摑
    ,'011':'<'#闈�
    ,'021':'"'#浜�豢鑹�
    ,'002':'='#钃�
    ,'012':'\\'#闂�摑鑹�
    ,'022':'_'#娴呯豢
    ,'100':'>'#鏆楃孩
    ,'110':'*'#鏆楅粍
    ,'120':'~'#榛勭豢鑹�
    ,'101':'%'#鏆楃传
    ,'111':'+'#鐏�
    ,'121':'^'#娴呯豢鑹�
    ,'102':'|'#绱�綏鍏�
    ,'112':'!'
    ,'122':'-'
    ,'200':'&'#绾�
    ,'210':';'#姗欒壊
    ,'220':"'"#榛�
    ,'201':')'#娣辩矇鑹�
    ,'211':'.'#绮夌孩鑹�
    ,'221':'`'
    ,'202':']'#绱�
    ,'212':','
    ,'222':' '#鐧�
    }    
    img = Image.open(f)
    if 0: img = Image.Image
    #缩小, 结果比较模糊, 还是用原比例较好
    #img = img.resize((80,60))
    w,h = img.size[:2]
    print w,h
    result = []
    for i in range(h):
        result1 = []
        for j in range(w):
            pixel = img.getpixel((j,i))[:3]
            result1.append(Palette[''.join([str(int(x//85.3)) for x in pixel])])
        result.append(result1)
    r="\n".join(["".join(x) for x in result])
    print r
    object_file=os.path.splitext(f)[0]+".txt"
    open(object_file,'w').write(r)    



经过一些改进, 下面的代码可以适用于控制台输出

def PngToTxt(f):
    Palette={'000':'#'#榛�
    ,'010':'@'#鏆楃豢
    ,'020':'/'#缁�
    ,'001':'$'#娣辫摑
    ,'011':'<'#闈�
    ,'021':'"'#浜�豢鑹�
    ,'002':'='#钃�
    ,'012':'\\'#闂�摑鑹�
    ,'022':'_'#娴呯豢
    ,'100':'>'#鏆楃孩
    ,'110':'*'#鏆楅粍
    ,'120':'~'#榛勭豢鑹�
    ,'101':'%'#鏆楃传
    ,'111':'+'#鐏�
    ,'121':'^'#娴呯豢鑹�
    ,'102':'|'#绱�綏鍏�
    ,'112':'!'
    ,'122':'-'
    ,'200':'&'#绾�
    ,'210':';'#姗欒壊
    ,'220':"'"#榛�
    ,'201':')'#娣辩矇鑹�
    ,'211':'.'#绮夌孩鑹�
    ,'221':'`'
    ,'202':']'#绱�
    ,'212':','
    ,'222':' '#鐧�
    }    
    img = Image.open(f)
    if 0: img = Image.Image
    #缩小, 结果比较模糊, 还是用原比例较好
    img = img.resize((60,20))
    w,h = img.size[:2]
    #print w,h
    result = []
    for i in range(h):
        result1 = []
        is_empty_line = True
        for j in range(w):
            pixel = img.getpixel((j,i))[:3]
            #result1.append(Palette[''.join([str(int(x//85.3)) for x in pixel])])
            if pixel==(255,255,255):
                s = '222'
            else:
                s = '110'
                is_empty_line = False
            result1.append(Palette[s])
        #去除空行
        if is_empty_line == False:
            result.append(result1)
    r="\n".join(["".join(x) for x in result])
    print r
    object_file=os.path.splitext(f)[0]+".txt"
    open(object_file,'w').write(r)

图例:


posted on 2014-03-20 09:36 wangkang 阅读(1751) 评论(2)  编辑 收藏 引用

FeedBack:
# re: 用python把图形转换为文本输出
2014-03-20 21:52 | 一考必过网周老师
我以后来学习了C++有什么用?我不知道啊~  回复  更多评论
  
# re: 用python把图形转换为文本输出
2014-03-26 09:37 | 租ipad
学习了,还在学习中。。。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理