Generate Ascii Images Like the Matrix
来源:互联网 发布:java找不到对象 编辑:程序博客网 时间:2024/06/18 14:30
Generate Ascii Image Like the Matrix
Inspired by this online image to text converter and this post on Oschina
script hosts at github. Poor hack, Any advice is welcomed.
Edit: Oooops, Demo sucks on my site, it’s perfect if you generate an alone html file.look here andhere
Demo
源码
#! /bin/env python# -*- coding: utf-8 -*-"""Turn images into acsii."""__author__ = 'Reverland (lhtlyy@gmail.com)'import Imageimport ImageOpsimport sysfilename = 'a.jpg'def makeHTMLbox(body, fontsize, imagesize): """takes one long string of words and a width(px) then put them in an HTML box""" boxStr = """<div style=\"font-size: %spx;line-height: 100%s; width: %s;background-color: rgb(0, 0, 0);border: 1px grey solid;text-align: center; overflow: hidden;\">%s</div> """ return boxStr % (fontsize, '%', imagesize[0], body)def makeHTMLascii(body, color): """take words and , and create an HTML word """ #num = str(random.randint(0,255)) # return random color for every tags color = 'rgb(%s, %s, %s)' % color # get the html data wordStr = '<span style=\"color:%s;float:left;\">%s</span>' return wordStr % (color, body)def i2m(im, fontsize): """turn an image into ascii like matrix""" im = im.convert('L') im = ImageOps.autocontrast(im) im.thumbnail((im.size[0] / fontsize, im.size[1] / fontsize)) string = '' colors = [(0, i, 0) for i in range(0, 256, 17)] words = '据说只有到了十五字才会有经验的' for y in range(im.size[1]): for x in range(im.size[0]): p = im.getpixel((x, y)) i = 14 while i >= 0: if p >= i * 17: s = makeHTMLascii(words[3 * i:3 * (i + 1)], colors[i]) break i -= 1 if x % im.size[0] == 0 and y > 0: s = s + '<br/>' string = string + s return stringdef i2a(im, fontsize): """turn an image into ascii with colors""" im = im.convert('RGB') im = ImageOps.autocontrast(im) im.thumbnail((im.size[0] / fontsize, im.size[1] / fontsize)) string = '' for y in range(im.size[1]): for x in range(im.size[0]): c = im.getpixel((x, y)) # print c s = makeHTMLascii('翻', c) if x % im.size[0] == 0 and y > 0: s = s + '<br/>' string = string + s return stringdef getHTMLascii(filename, fontsize, style='matrix', outputfile='a.html', scale=1): """Got html ascii image""" im = Image.open(filename) size = (int(im.size[0] * scale), int(im.size[1] * scale)) im.thumbnail(size, Image.ANTIALIAS) if style == 'matrix': ascii = makeHTMLbox(i2m(im, fontsize), fontsize, im.size) elif style == 'ascii': ascii = i2a(im, fontsize) else: print "Just support ascii and matrix now, fall back to matrix" ascii = makeHTMLbox(i2m(im, fontsize), fontsize, im.size) with open(outputfile, 'wb') as f: f.write(ascii) return 1if __name__ == '__main__': if sys.argv[1] == '--help' or sys.argv[1] == '-h': print """Usage:python i2a.py filename fontsize [optional-parameter] optional-parameter: scale -- between (0, 1) style -- matrix or ascii""" else: filename = sys.argv[1] try: fontsize = int(sys.argv[2]) except: fontsize = int(raw_input('input fontsize please:')) try: scale = float(sys.argv[3]) except: scale = 1 try: style = sys.argv[4] except: style = 'matrix' getHTMLascii(filename, fontsize, scale=scale)
More Demo
- Generate Ascii Images Like the Matrix
- I Like Matrix!
- [JZOJ4838]I Like Matrix!
- JZOJ4838. I Like Matrix!
- Jzoj4838 I like Matrix!
- XART------generate art ascii texts.
- styling the SVG images
- SSP P2821 I Like Matrix!
- The matrix
- The Matrix
- The Matrix
- AVFoundation + AssetWriter: Generate Movie With Images and Audio
- like the notebook
- Matrix-Like Credits for MFC Applications
- SSL P2822 I Will Like Matrix!
- generate the xorg.conf file
- generate the call load file
- the jacobian matrix and the gradient matrix
- 6.4
- 求的数组的topN
- MFC菜单添加图标
- VisualNet资源管理
- 压缩 tempdb 数据库
- Generate Ascii Images Like the Matrix
- 权重值-字符串-10春机考-专题讲解
- Visual Studio 2013 Preview, C++:Cannot find or open the PDB file问题
- Android复习之Scroller
- 2014年华为上机题及代码
- TCPDump:捕获并记录特定协议 / 端口
- C# 语言规范--1.1 开始
- 【Android基础入门〖11〗】Fragment
- win7下搭建cocos2d-x环境