当前访客身份:游客 [ 登录 | 加入 OSCHINA ]

代码分享

当前位置:
代码分享 » Python  » 编程基础
宝具滑

python 图片转字符(然并卵)

宝具滑 发布于 2016年02月18日 11时, 2评/5530阅
分享到: 
收藏 +0
2
python 图片转字符(然并卵)
代码非常非常简单不做详细说明。
主要逻辑就是将图片转为灰度图,然后遍历像素获取灰度值匹配对应的字符,将拼接好的字符串输出到记事本文件。
(代码提供了两个方法,其实都差不多;记事本打开时要去掉自动换行,缩小字体大小,我打开是用宋体打开的)
标签: <无>

代码片段(4) [全屏查看所有代码]

1. [代码][Python]代码     跳至 [1] [4] [全屏预览]

from PIL import Image
import os

serarr=['@','#','$','%','&','?','*','o','/','{','[','(','|','!','^','~','-','_',':',';',',','.','`',' ']
count=len(serarr)

def toText(image_file):
   image_file=image_file.convert("L")#转灰度
   asd =''#储存字符串
   for h in range(0,  image_file.size[1]):#h
      for w in range(0, image_file.size[0]):#w
         gray =image_file.getpixel((w,h))
         asd=asd+serarr[int(gray/(255/(count-1)))]
      asd=asd+'\r\n'
   return asd

def toText2(image_file):
   asd =''#储存字符串
   for h in range(0,  image_file.size[1]):#h
      for w in range(0, image_file.size[0]):#w
         r,g,b =image_file.getpixel((w,h))
         gray =int(r* 0.299+g* 0.587+b* 0.114)
         asd=asd+serarr[int(gray/(255/(count-1)))]
      asd=asd+'\r\n'
   return asd


image_file = Image.open("convert.jpg") # 打开图片
image_file=image_file.resize((int(image_file.size[0]*0.9), int(image_file.size[1]*0.5)))#调整图片大小

print u'Info:',image_file.size[0],' ',image_file.size[1],' ',count 
try:
   os.remove('./tmp.txt')
except  WindowsError:
    pass
   
tmp=open('tmp.txt','a')


tmp.write(toText2(image_file))

tmp.close()

2. [图片] convert.jpg    

3. [图片] 111.png    

4. [代码]话说灰度值是0~256吗?!改了一下。反正我这里没问题。     跳至 [1] [4] [全屏预览]

#!/usr/bin/python
# -*- coding: UTF-8 -*- 
from PIL import Image
import os
 
serarr='''@#$%&?*aeoc=<{[(/l|!-_:;,."'^~` '''
count=len(serarr)
 
def toText(image_file):#此函数不能输入 gif 文件
   image_file=image_file.convert("L")#转灰度
   asd =''#储存字符串
   for h in range(0,  image_file.size[1]):#h
      for w in range(0, image_file.size[0]):#w
         gray =image_file.getpixel((w,h))
         asd=asd+serarr[int(gray/(256/(count)))]
      asd=asd+'\r\n'
   return asd
 
def toText2(image_file):
   asd =''#储存字符串
   for h in range(0,  image_file.size[1]):#h
      for w in range(0, image_file.size[0]):#w
         r,g,b =image_file.getpixel((w,h))
         gray =int(r* 0.299+g* 0.587+b* 0.114)
         asd=asd+serarr[int(gray/(256/(count)))]
      asd=asd+'\r\n'
   return asd
 
 
image_file = Image.open("hehe.jpg") # 打开图片
image_file=image_file.resize((int(image_file.size[0]*0.9), int(image_file.size[1]*0.5)))#调整图片大小
print u'Info:',image_file.size[0],' ',image_file.size[1],' ',count 
 
    
tmp=open('tmp.txt','w')
tmp.write(toText(image_file))
tmp.close()


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(2)

  • 1楼:风中骄子 发表于 2016-04-02 08:32 回复此评论
    可以把图片上的数字直接转化成数字吗
  • 2楼:苏生不惑 发表于 2017-01-17 21:49 回复此评论
    图片中的文字能转文字吗,比如截图里的字符
开源从代码分享开始 分享代码