本文转载自:http://blog.csdn.net/xuhang0910/article/details/50900258
首先安装pip
$ sudo apt-get install Python-pip python-dev build-essential
$ sudo pip install –upgrade pip
$ sudo pip install –upgrade virtualenv
<code class="hljs python has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#coding=utf-8</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#灰度值公式:灰度值 = 0.2126 * r + 0.7152 * g + 0.0722 * b</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">from</span> PIL <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> Image <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> argparse <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#获取参数</span> IMG = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'/home/xuhang/桌面/new/python小程序/画转字符/1.png'</span> WIDTH = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">80</span> HEIGHT = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">60</span> OUTPUT = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'/home/xuhang/桌面/new/python小程序/画转字符/p2c.txt'</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#所用的字符</span> ascii_char = list(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. "</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># 将256灰度映射到70个字符上</span> <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">def</span> <span class="hljs-title" style="box-sizing: border-box;">get_char</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(r,b,g,alpha = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">256</span>)</span>:</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> alpha == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">' '</span> length = len(ascii_char) gray = int(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.2126</span> * r + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.7152</span> * g + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.0722</span> * b) unit = (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">256.0</span> + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)/length <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> ascii_char[int(gray/unit)] <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> __name__ == <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'__main__'</span>: im = Image.open(IMG) im = im.resize((WIDTH,HEIGHT), Image.NEAREST) txt = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> i <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> range(HEIGHT): <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> j <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> range(WIDTH): txt += get_char(*im.getpixel((j,i))) txt += <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'\n'</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">print</span> txt <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># 字符画输出到文件</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> OUTPUT: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">with</span> open(OUTPUT,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'w'</span>) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">as</span> f: f.write(txt) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">with</span> open(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"output.txt"</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'w'</span>) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">as</span> f: f.write(txt)</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li></ul>
原图:
结果
<code class="hljs http has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"> <span class="smalltalk" style="box-sizing: border-box;"> <span class="hljs-char" style="box-sizing: border-box;">$$</span><span class="hljs-char" style="box-sizing: border-box;">$%</span>aQQQb#<span class="hljs-char" style="box-sizing: border-box;">$$</span> <span class="hljs-char" style="box-sizing: border-box;">$#</span>r[[[aI (<span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">X</span>[|<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">" (#$ %1[[[[[rp ap "</span>|<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span><span class="hljs-char" style="box-sizing: border-box;">$ </span> <span class="hljs-char" style="box-sizing: border-box;">$|</span>[[[[[[[h n p[[q<span class="hljs-char" style="box-sizing: border-box;">$ </span> <span class="hljs-char" style="box-sizing: border-box;">$$</span>[[[[[[[[[[ <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">Cf</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">"h h"</span>h |[[[% <span class="hljs-char" style="box-sizing: border-box;">$t</span>[[[[[[[[[[[ ( hp- <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">I</span> <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">U</span>[[[[<span class="hljs-char" style="box-sizing: border-box;">$ </span> %[[[[[[[[[[[ta( pO - zZ[% <span class="hljs-char" style="box-sizing: border-box;">$[</span>[[[[[[[[[q( <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">C</span>} <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">"(kZqhf (X$ $[[[[[[[[1O p> Ih }Z ZW Cz>> C $[[[[[[[[M -OO-"</span> (<span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">ZZZZZ</span>% h n q[[[[[[[a ><span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">Cp</span>- <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">MZZZm</span>> <span class="hljs-char" style="box-sizing: border-box;">$[</span>[[[[[[# <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">C</span>- fpnn----- #[[[[[[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">" nn---- IO > [[[[[[uC z $ $[[[[[[h } >nhC- $ $[[[[[[ WZZZZZZqk%omd#%O("</span> - pI <span class="hljs-char" style="box-sizing: border-box;">$[</span>[[[[r bZZb%<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">#wZZZZZZZZZZZZmbo</span>&&pW&oa - <span class="hljs-char" style="box-sizing: border-box;">$[</span>[[[[a kZZZZZZZZZZZZZZZZZZZZZZZZZZZI <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">C</span> <span class="hljs-char" style="box-sizing: border-box;">$[</span>[[[[a <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">WZZZZZZZZZZZZZZZZZZZZZZZZZZ</span>& <span class="hljs-char" style="box-sizing: border-box;">$ </span> <span class="hljs-char" style="box-sizing: border-box;">$[</span>[[[[p }<span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">ZZZZZZZZZZZZZZZZZZZZZZZZZa</span> <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">O</span><span class="hljs-char" style="box-sizing: border-box;">$ </span> r[[[[a %m&<span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">OOOOOOmWaZZZZZZZZZZZZk</span> <span class="hljs-char" style="box-sizing: border-box;">$ </span> #[[[[<span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">U</span> <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">I</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">#OOOOOOOOOOoqZZZZZZZZZZ</span>- - <span class="hljs-char" style="box-sizing: border-box;">$[</span>[[[[} -<span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">OOOOOOOOOOOOMZZZZZZZd</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">" $ Z[[[[&"</span> <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">OOOOOOOOOOOOO</span>%<span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">ZZZZZq</span>> n <span class="hljs-char" style="box-sizing: border-box;">$1</span>[[[[q <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">"kOOOOOOOOOOObZZZ& } B[[[[[- %OOOOOOOOOO%ZZh $ #[[[[1"</span> <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">IBmOOOOOOB</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">" >$ r[[[[b z&o&O"</span> ><span class="hljs-char" style="box-sizing: border-box;">$ </span> <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">Z</span>[[[[<span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">X</span> }<span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">O</span>&adZ% bZwo&%wZZM <span class="hljs-char" style="box-sizing: border-box;">$r</span>[|<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">#aZZZZmboo</span>* zM*<span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">Z0Z</span>@-<span class="hljs-char" style="box-sizing: border-box;">$ </span> <span class="hljs-char" style="box-sizing: border-box;">$&</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">ZZZZWZ1</span>[[[[- aJzzzZ<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">"> $qW$1[[[[[[[["</span> zzzCZz<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">" $ %[[[[[[[[[[[C -zzz0zb $ $[[[[[[[[[[[[C ("</span>nMq<span class="hljs-char" style="box-sizing: border-box;">$n</span> <span class="hljs-char" style="box-sizing: border-box;">$ </span> [[[[[[[[[[[#<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">"#} -h >--- p r[[[[[[Uq[o Ip> f # "</span><span class="hljs-char" style="box-sizing: border-box;">$ </span> q[[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>Q<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">#t</span>[[<span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">Xf</span> - n<span class="hljs-char" style="box-sizing: border-box;">$}</span> <span class="hljs-char" style="box-sizing: border-box;">$ </span> <span class="hljs-char" style="box-sizing: border-box;">$[</span>[[[[[[[a ( <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">" $[[[[[[[[a n fn [[[[[[[[Uf - (O $oZw$ U[[[[[[[[X n( z} - I &ZZZZ$a[[[[[[[[[h "</span>nCOn( q <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">C</span> <span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">MZZZZ</span><span class="hljs-char" style="box-sizing: border-box;">$Q</span>[[[[[[[[[[q p[r <span class="hljs-char" style="box-sizing: border-box;">$ </span> <span class="hljs-char" style="box-sizing: border-box;">$k</span>ZZ@ |[[[[[[[[[[[rz -q[[[ n <span class="hljs-char" style="box-sizing: border-box;">$[</span>[[[[[[[[[[[[[[[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>r[[[[[[[[( } <span class="hljs-char" style="box-sizing: border-box;">$[</span>[[[[[[[[[[[[[[[[[[[[[[|<span class="hljs-class" style="box-sizing: border-box; color: rgb(102, 0, 102);">QaB</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">"$ $(a[[[[[[[[[[[[[[[[[u%$$ $C }$ $> o[[[[[[[[[[[[[[[a$ $ >[[[[[[[[[[[[&$ $ n[[[[[[[[u$ p C1[[[[r$ $ fp8 $ $ n ( $O z $( ($ $*nnC$ </span></span></code>