您的位置:首页 > 编程语言 > Python开发

【转载】python 图片转字符

2016-06-15 21:44 495 查看
本文转载自: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><
4000
;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=
af53
"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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 字符