--
Python
- Converting an image to ASCII image in Python - GeeksforGeeks
- Python ASCII Video And ASCII Image Creator · GitHub
安裝插件
- Pillow
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# Python code to convert an image to ASCII image. import sys, random, argparse import numpy as np import math from PIL import Image # gray scale level values from: # http://paulbourke.net/dataformats/asciiart/ # 70 levels of gray gscale1 = "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. " # 10 levels of gray gscale2 = '@%#*+=-:. ' def getAverageL(image): """ Given PIL Image, return average value of grayscale value """ # get image as numpy array im = np.array(image) # get shape w, h = im.shape # get average return np.average(im.reshape(w * h)) def covertImageToAscii(fileName, cols, scale, moreLevels): """ Given Image and dims (rows, cols) returns an m*n list of Images """ # declare globals global gscale1, gscale2 # open image and convert to grayscale image = Image.open(fileName).convert('L') # store dimensions W, H = image.size[0], image.size[1] print("input image dims: %d x %d" % (W, H)) # compute width of tile w = W / cols # compute tile height based on aspect ratio and scale h = w / scale # compute number of rows rows = int(H / h) print("cols: %d, rows: %d" % (cols, rows)) print("tile dims: %d x %d" % (w, h)) # check if image size is too small if cols > W or rows > H: print("Image too small for specified cols!") exit(0) # ascii image is a list of character strings aimg = [] # generate list of dimensions for j in range(rows): y1 = int(j * h) y2 = int((j + 1) * h) # correct last tile if j == rows - 1: y2 = H # append an empty string aimg.append("") for i in range(cols): # crop image to tile x1 = int(i * w) x2 = int((i + 1) * w) # correct last tile if i == cols - 1: x2 = W # crop image to extract tile img = image.crop((x1, y1, x2, y2)) # get average luminance avg = int(getAverageL(img)) # look up ascii char if moreLevels: gsval = gscale1[int((avg * 69) / 255)] else: gsval = gscale2[int((avg * 9) / 255)] # append ascii char to string aimg[j] += gsval # return txt image return aimg # main() function def main(): # create parser descStr = "This program converts an image into ASCII art." parser = argparse.ArgumentParser(description=descStr) # add expected arguments parser.add_argument('--file', dest='imgFile', required=True) parser.add_argument('--scale', dest='scale', required=False) parser.add_argument('--out', dest='outFile', required=False) parser.add_argument('--cols', dest='cols', required=False) parser.add_argument('--morelevels', dest='moreLevels', action='store_true') # parse args args = parser.parse_args() imgFile = args.imgFile # set output file outFile = 'out.txt' if args.outFile: outFile = args.outFile # set scale default as 0.43 which suits # a Courier font scale = 0.43 if args.scale: scale = float(args.scale) # set cols cols = 80 if args.cols: cols = int(args.cols) print('generating ASCII art...') # convert image to ascii txt aimg = covertImageToAscii(imgFile, cols, scale, args.moreLevels) # open file f = open(outFile, 'w') # write to file for row in aimg: f.write(row + '\n') # cleanup f.close() print("ASCII art written to %s" % outFile) # call main if __name__ == '__main__': main() |
執行
1 |
$python "ASCII_IMAGE_GENERATOR.py" --file data/11.jpg --cols 120 |
轉換成果如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
@@@@@@%%%%%###%%%%%%%%%###**##@@@@@@@@%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%#**=-..................... @@@@@@%%%%%###%%%%%#####**##%@@@@@@@@@@@@@@@@@@@@@@@%@@@@%@@@@@@@@@@@@@@@@%##%%*=:.................. @@@@@@%%%%########****###**#@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%@@@%%%@@@@@@@@@@@@%%%+=*:................. @@@@@%%%#####*****+++*##*#%@@@%@@@@@@@@@@@@@%%%%%%%%@@@@@@@%%%%@@@@@@@@@@@@@%%@%##=::............... %%%%%%##********+==++#*##%@@@@@@@@%@@@%%%@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@%%##*-............... ######**+++++++++=+++####%@@@@@%##%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%#:.............. ****+===+++++++++=++++**%%%%%@%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%@%%%%-.............. +===--==+++++=---+++*+**##%%%%%%%%%%%%%%%%%%%%%%%%%@@@@%%%%@@@@@@@@@@@@@@@@@@@@@@%%%#=:............. ===--==+++=--:::-=++++*+*##%%%%%%%%@%%%###*****##%%###**###%%%%@@@@@@@@@%%%@@@@@@%%%%*:............. ===--------:::::===++*#**##%%%%%%%##***++========+=======+++*##%%%%%@@@@@@@@@@@@@%%%%#-............. ==---:::::::::::+++**#**#%##*+++++++===-----:::-----:-:-----==++**##%@@@@@@@@@@@%%%%%#-............. ==---::::::::::-++**###%%%#*+======-----:::::::::::::::::------===++*#%%@@@@@@@@@%%%%#+............. ==---:::::::::--=**%#%%%%%#+==-----::::::::::::::::::::::::--------==**#%@@@@@@%%%%%%%*:............ +==---::::-----==##%#%%%%%#=----::::::::::::::::::::::::::::---------=+*#@@@@@@@%%%%%#+............. ++==----------===*##%%@%@#+---::::::::::::::::::::::::::::::::--------=+*%@@@@@@@%%%%%-............. ++=======------==+**%@@%#+--::-----::::::::::::::::::::::::::::::::----=+#@@@@@@%%%%%=.............. ======--------::-+**#%%#+-------=++++++=-::::::::::::::----==+++++==----=+#@@@@@%%%%*:.............. ======---------++=*##%*=-::::::::::--==+++=--:::::::---===+++++++======-==+#@@@@%%%%:............... ======-------=-+==+##*-::::::::::::::----=---:::::::-----==------------=--=+#@@%%%@#-............... =====---=====+===--##=..:::---+++*%#*#+=-==---:::::--=========-------------=+%@%%%%#=............... =+++=---=======---=**:.:::::------**#*-=+=---::::::--==+++=###%#+*+=--------=*%%%*+=................ +***+===-----------++..:::::::::----------:::::..::----==--=***=-==+=---:::--=%@#==:................ ***+==----------::-=-..::::::::::::-----::::::...::::::-------------:::::::--=%%*=-................. *#*=--::------=*+::::..:::::::::::::::::::::::...::::::::::::::::::::::::::--=#+=-:................. #*=--::::::--=+#*+-:::::::::::::::::::::::::::...:::::::::::::::::::::::::---+=--:.................. *+=---------+*#****=-::::::::::::::::::::::::....::::::::::::::::::::::::---==--:................... +=========++*##*****+-:::::::::::::::::::::::::..::::::-::::::::::::::::----=--:.................... ===+++****++***+++++++-::::::::::::::::::::::::::::::::-:::::::::::::::------:...................... ++**##%#**+++++++++++++:::::::::::::::::--=+=----==*+=--::::::::::::::----::........................ **#%%%%%#*+++++++++=====:::---:::::--::::::---====----:::::::::::::-:----:.......................... **###%%##**++++++=====---:-::::--:---::::::::::::::::::::--:::-----------:.......................... ++*##%%###**++++======-------::-----=++++++++=======--------------------:........................... ++**######***+++===========---------::---========+++++++++=------------:............................ ++*##%%##**++++=======++**+:-------::::::--------====-----------------:............................. *##%%%#**++++++==----=+*##+::--==---::::::----=----------------====-:............................... ##%%%#*++==++++=----=+***#*::-------:::::::::::::------------=======:............................... %%%%##*+===++++====+****#@*::--------::::::::::::::::::-----==++==+%=:.............................. %%%%##*+====++++********%@#::------=---::::::::::::::-----=++++===*@%:.............................. #%%%%#*+===++**####*+***%@%-::------======-------------=++++=====+%@%#*+=::.................:::::::: ####*++++++*###%##+=*#+*%@%=---------======++++++++++++++=======+#@@%%%%%%*=:::::::::::::::::::::::: ***+====+******+=-=+%***#%%*---------========++++++++++========+#@@@@%%%@%***-:::::::::::::..:::.::: +++====+++++++++==+*%##*#%%%*--::--------===+++++++==========++%@@@@@@@@@#****++-::::::...:::::::::: +++++++******+++++++#%%###%%%*------------==================+*%@@@@@@@@@#*#*##******+=-::::....::::: |
--
jp2a
1 |
# jp2a --width=120 iu.jpg > iu.txt |
結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
':lOKKXXKKKKKKKKK00Oo;'.......................':ddxxxxxxkxxxxxkxxxxdxxkkxxxddddx ooxOKXXXKKKKKKKK0Oc..............................cxxxkxxxxkkxxxxxkkxxxddxxxkkxxx 0K000KXXKKKKKKKKk'.............,'.................;xxxkkkxxxkkkkxxxxxkkkkxxdddxx KKK00KXXXXXXKKKO'.............',,'.................,dxxkkkkkxxxkOkkkxddxxkOOkkxx KKKK0KXXXXXXKKKl....... .....,;::;,,,,'............dxxxkkOkkkxxxkOOkkkxxdddxxk KKKKK0XXXXXXXKk...... ....,;:coolllcc::,''..'....ckkkxxxkOOOkkkxddxxkOOOkkxx KKKKK0KXXXXXX0' . .....,:cldxxxxxxddddo:,..'...'xkkkkkxxxxkOOOkkkxxdddxxkk KKKKKKKXXXXXXl .....',:lodxkOOOOOkkkkxxo:'.....cxkOOOOkkkxxxxxkOOOOOkkxxd KKKKKK0KXXXXXd . ...,;cloxxkOO0000OOOOkxdl,....;xkxxkOOOOOkkxxxdddddxxkkO KKKKKKKKXXXXX0 ....,,:ccdxkOOO0000000OOkxl:....;xkkkxxxxxkkOOOOOOOkkxxxdd KKKKKKK0XXXXXK' ...,',:lxkkOOOO000000Oxdlcodo;..:kOOOOkkkxxxddddxxxkkOO00 KKKKKKK0KXXXXXx ....'cdxddooodxkO000Okxx:':c';.,okOOOOOOOOOkkkkxxxddddoo KKKKKKKKKXXXXXKo ....::::cclodxxxkOOOOkx:..;oldo:oxxxkkkkkkkOOOO000000000 KKKKKKKK0XXXXXKKx. ..':oodxdl;,;odxxxkO00kxooddxxkkxkkkOkkkkxxxxdddooooooooo KKKKKKKK0KKXXXKK0l;:....;odxxdl';'..ddlxxkkOOOOOOOOOOOOOOOOOOOOOOOOkkkkkkkkkkkkk KKKKKKKKK0KKKKKKKKddo::.'ldxxxdooooodxkkkkkkOOOOOOOOOOOOOOO000000000OOOOOOOOOkkk KKKKKKKKK0KKKKKXKKKOdc;..;dxxkkkkkkkOOOOkkxxkOOOkkkkkkkO0OOOOkkxxxxdddddddddxxxx 0KKK0000000KKKKKKKKK0x;.''cdxxxkOOOOO00OkxdodkOOkxxxxkkOOOOOkkOOOOOOOOO000KKKKKK 00000000000KKKKKKKKKK0c,,;:ldxxxkkOOO00Okdodloxxxkxddxk00OOO00000KKKK0OOkxxdoooo 00000000000KKKKKKKKKKKO;:oOxodxxxxkkOOOOkxxxxxxxdooddx0OO000KKKKK0OkkkkkkkkOOO00 000000000000KKKKKKKKKKKk;dO00dddxxxxkkxdoolc;,''''oxxdodxxO0KXK0OOOO00000KKXKK0O 00000000000OKKKKKKKKKKKKOllO00doddxxxxxddoc:;,,;cdkxdddxddoolllodxkO0KKK0Okkkkxk 00000OOOOOOO0KKKKKKKKKKKK0Olx0koddddxxxxxxxxdxxxkkkkO00O00K00000OkOxc:;:codxO00X 0000OOOOOOOOO0KKKKKKKKKKKK00oOOOddddddxxxxdxxxxxxkod00Okddkk0KK0dddx00Odoolcc:;; OOOOOOOOOOOOk00000KKKKKKKK0OxO000Oxdxdddddddxxxdo;dx0000kddx0K00Oxdk0KK0xooooddd OOOOOOOOOOOOkO000000000000OkO00000KKOkkkxxxxddolx0KK0OO0000000KKK000K00K0kxdllll OOOOOOkkkkkkkkO0OOOOOOOOOOOO0000KKKKKKKKKK0kkOO0OOKK0KKKKKKKKKKKKK00000KOxKNNXKO kkkkxkkkkxxxxxOOOOOOOOOOOkOK00O0KXXXXXXXKKK0x;k00KKKKKKKKKKKKKKKKKK000OdkkXWWWNX ';ll':dxxxxxxxkOOOOOkkkkk00K0O000KKKXXXXXXXKoOXXKKKKKKKKKKKKK0KKKKKKK000O0XWWMWW ';'..'c;,cdddddkkkkkkxxOKKK0K0O0000KKKKKKKXKXKKKKKKKKKKKKKK0kxOkk0KKK000OOXWWKXW ......,,::ooddokkkxxxk0XXXK0Ok0OO0000KKKKXXXXXXKXKKKKKKKKkxxOKKK00KKK000OONMWWKO ...''. .loooodxxxxkKKX0XKKOOOKOO000KXXXXXXXXKXXXXKKKKKKKo0KKKKKKKKKK0OOx:okKWN ,,..'' :looolxkO0XXKKKKOd00O0K00KKXXXXXXXXXXXXKKKKKKKKKxKKKKKKKKKKKKOkkdl:;,c ,. ,clo0XNNNNNNNNXXX00XK00KKKKKKKXXXXXXXXXKKKKKKKKKxKKKKKKKKKKKKOOkxxxxdo ... .;:dXNNNNNNNNNNNNNXXkKXKKXKKKKKKKXXXXXXKKKKKKKKKKkKKKKKKKKKKKK0kkxxxxxx .. .;cXXNNNNNNNNNNNNNNNNXKXXXXKKKKKKXXXXXXKKKKKKKKKKK0KKKKKKKKKKKKkxxxxxxx ........'',0XNNNNNNNNNNNNNNNNNNXKXXXKKKKKKKKXKXXKKKKKKKKKKKKKKKKKKKKKKKK0xxxxxxx ,;;;;;,,';lXXNNNNNNNNNNNN00NNNNNX0KXXKKKKKKKKKKXXXXKKKKKKKKKKKKKKKKKKKKKKxxxxxkx ;;;;;,',,;l0XXXNNNNNNNNKkNNNNNNNN0OKKXKOooOKKkKKXXXXXXXKKKKKKKKKKKKKKKKKKkxxxxkk ,,,,,';::::k0KKXXXNNNNXdNNNNNNNNNXdOKKdO00Oo000KK00KXXXKKKKKKKKKKKKKKKKK0kxxxxxx |
--
1,000 total views, 2 views today