You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Comrad/komrade/cli/artcode.py

802 lines
15 KiB
Python

ART_TELEPHONE = '''
..--""""----..
.-" ..--""""--.j-.
.-" .-" .--.""--..
.-" .-" ..--"-. \\/ ;
.-" .-"_.--..--"" ..--' "-. :
.' .' / `. \\..--"" __ _ \\ ;
:.__.-" \\ / .' ( )"-. Y
; ;: ( ) ( ). \\
.': /:: : \\ \\
.'.-"\\._ _.-" ; ; ( ) .-. ( ) \\
" `.""" .j" : : \\ ; ; \\
bug /"""""/ ; ( ) "" :.( ) \\
/\\ / : \\ \\`.: _ \\
: `. / ; `( ) (\\/ :" \\ \\
\\ `. : "-.(_)_.' t-' ;
\\ `. ; ..--":
`. `. : ..--"" :
`. "-. ; ..--"" ;
`. "-.:_..--"" ..--"
`. : ..--""
"-. : ..--""
"-.;_..--""
'''
ART_PHONE_SM1 = """
.----------------.
/ _H______H_ \\@,
\\____/ \\____/ @,
/ \\ `@
| LI LI LI | ,@
| LI LI LI | ,@'
| LI LI LI | ,@'
| LI LI LI |@@'
jgs \\ /'
`----------'
"""
ART_ROTARY2="""
_______________
/ \\
| .---------. |@
'---' .-----. '---'@
.' /6 5_4 3\\ '. @
| |7 /...\\ 2| | @
| |8 \\___/ 1| | @
| \\_9_0_)\\/ | @@
/==|_____________|@@@@
H-------------------@@
H ) || || ( @@
H / || || \\ @
H |----''---''----|
=/ |_______________|
"""
ART_KEY = """
8 8 8 8 ,ooo.
8a8 8a8 oP ?b
d888a888zzzzzzzzzzzzzzzzzzzz8 8b
`""^""' ?o___oP'
"""
ART_OLDPHONE = """
__
/` _`\\
| (_()| .-.
\\_ _/_/ \\
||=[_] |
|| | | |
||/ \\ |
||`---' /
.--'||-.___.'
/` .-||-.
'-/`.____.`\\
jgs '.______.'
"""
ART_OLDPHONE2="""
_|~|/|
( | | |
/_|_|\\|
| |
| |~|
| | |
| | |
| |-|
| | \\
| |__|
|_|_
/ ~-_
/ ~-_
|___________|
"""
ART_ROTARY = """
_...----..._
,-' ,-. `-.
,' ,-. ( 4 ) ,-. `.
,' ( 5 ) `-' ( 3 ) `.
/ ,-. `-',-'' ``-.`-' ,-. \\
/ ( 6 ) ,' `. ( 2 ) \\
: `-' / FEUER \\ `-' :
| ,-. : ________ : ,-. |
|( 7 ) | |________| | ( 1 )|
| `-' : ; `-' |
: ,-. \\ NOTRUF / ;
\\ ( 8 ) `. ,'(`. /
\\ `-' ,-.`-..__..-' \\ `-./
`. ( 9 ) ,-. \\ ,'
`. `-' ( 0 ) ,'`
`-._ `-' _.-'
```----''' SSt
"""
ART_PHONE_DIAGRAM = """
________
.' / / )
/ /##/ /|
/ `--' / |
/__ __ __ / |
//_//_//_// / __
//_//_//_// / \\`.___ Listening end
//_//_//_// /
//_//_//_// /__
/ / / \\`.___ Buttons
/ .-. / /
/ /#/ / /
/ `-' / /__
/ .====. / / \\`.___ Speaking end
|`--------' /
\\ , .'__
`-//----' \\`.___ Disconnect button
//
"""
ART_OLDPHONE3 = """
__ _
.: .' '.
/: / \\_
;: ; ,-'/`:\\
|: | | |():|
;: ; '-.\\_:/
\\: \\ /`
':_'._.'
||
/__\\
.---. {====}
.' _,"-,__|:: |
/ ((O)=;--.:: |
; `|: | |:: |
| |: | |:: |
| |: | |:: |
| |: | |:: |
| |: | |:: |
| |: | |:: |
| /:'__\\ |:: |
| [______]|:: |
| `----` |:: |__
| _.--|:: | ''--._
; .' __{====}__ '.
\\ .'_.-'._ `""` _.'-._ '.
'--'/` `''''` `\\ '.__
jgs '._ _.'
`""--......--""`
"""
ART_OLDPHONE4 = """
__
/` _`\\
| (_()| .-.
\\_ _/_/ \\
||=[_] |
|| | | |
||/ \\ |
||`---' /
.--'||-.___.'
/` .-||-.
'-/`.____.`\\
'.______.'
"""
# by jgs
ART_PAYPHONE = """
_________________
/ __ \\
| (__) |
| |
| .-----. .--. |
| | | / \\ |
| '-----' \\ / |
| | | |
| LI LI LI | | |
| LI LI LI | | |Oo
| LI LI LI | | |`Oo
| LI LI LI | | | Oo
| | | | Oo
| .------. / \\ | oO
| | | \\ / | Oo
| '------' '-oO | oO
| .---Oo | Oo
| || ||`Oo oO
| |'--'| | OoO
| '----' |
jgs \\_________________/
"""
ART_HAMMER = """
,
/( ___________
| >:===========`
)(
""
"""
ART_KEY_PAIR = """
__
/o \\_____
\__/-="="`
__
/ o\\
\_ /
<|
<|
<|
`
"""
ART_KEY_PAIR2 = """
__
/o \\_____
\__/-="="`
__ (public)
/ o\\
\_ /
<|
<|
<| (private)
"""
ART_KEY_PAIR2A = """
__
/o \\_____
\__/-="="`
__ (1) public key
/ o\\
\_ /
<|
<|
<|
"""
ART_KEY_PAIR2B = """
__
/o \\_____
\__/-="="`
__ (1) public key
/ o\\
\_ /
<|
<|
<| (2) private key
"""
ART_KEY_PAIR32 = """
__
/o \\_____
\__/-="="`
_ _ (1) public key
/o \\
\ _ /
< |
< |
< | (2B) privkey_encr
(2A) privkey_decr
"""
ART_KEY_PAIR3A2 = """
__
/o \\_____
\__/-="="`
_ _ (1) public key
/o \\
\ _ /
< |
< |
< |
"""
ART_KEY_PAIR3B2 = """
__
/o \\_____
\__/-="="`
_ _
/o \\
\ _ /
< |
< |
< | (2B) privkey_encr
"""
ART_KEY_PAIR3C2 = """
__
/o \\_____
\__/-="="`
_ _ (1) public key
/o \\
\ _ /
< |
< |
< | (2B) privkey_encr
(2A) privkey_decr
"""
ART_KEY_PAIR3 = """
__
/o \\_____
\__/-="="`
_ _ (1) public key
/o \\
\ _ /
< |
< |
< | (2B) privkey_encr
(2A) privkey_decr
"""
ART_KEY_PAIR4 = """
__
/o \\_____
\__/-="="`
? _
?? \\
? _ /
? |
? |
? | (2B) privkey_encr
(2A) privkey_decr
"""
ART_KEY_PAIR4Z = """
__
/o \\_____
\__/-="="`
? _
?? \\
? _ /
? |
? |
? |
(2A) privkey_decr
"""
ART_KEY_PAIR4D = """
? _
?? \\
? _ /
? |
? |
? | (2B) privkey_encr
(2A) privkey_decr
"""
ART_KEY_PAIR4C = """
? _
?? \\
? _ /
? |
? |
? |
(2A) privkey_decr
"""
ART_KEY_PAIR4B = """ ? _
?? \\
? _ /
? |
? |
? |
"""
ART_KEY_PAIR31A = """
__
/o \\_____
\__/-="="`
(1) public key"""
ART_KEY_PAIR3A = """
__
/o \\_____
\__/-="="`"""
ART_KEY_PAIR3B = """ _ _
/o \\
\ _ /
< |
< |
< |
(2A) (2B) encrypted
encryption form of (2)
key for (2B)
"""
ART_KEY_PAIR5 = """
__
/o \\_____
\__/-="="`
(1) public key
_ _
/o \\
\ _ /
< |
< |
< |
(2A) (2B) encrypted
encryption form of (2)
key for (2B)
"""
ART_KEY_PAIR4Z1 = """
__
/o \\_____
\__/-="="`
(1) public key
? _
?? \\
? _ /
? |
? |
? |
(2B) encrypted
form of (2)
"""
ART_KEY_PAIR4Z2 = """
__
/o \\_____
\__/-="="`
(1) public key
? ?
?? ?
? ? ?
? ?
? ?
? ?
"""
# """
ART_KEY_PAIR4Z3 = """
__
/o \\_____
\__/-="="`
?? (1) public key
? ?
? ?
??
??
??
"""
ART_KEY_PAIR4Z3 = """
__
/o \\_____
\__/-="="`
?? (1) public key
? ??
? ?
??
?
??
"""
ART_KEY_PAIR4Z42 = """
?
? ??????
?? ? ? ??
??
? ??
? ?
??
?
??
"""
ART_KEY_PAIR4Z4B = """
??
?? ??????
??????????
__
/ o\\
\_ /
<|
<|
<|
"""
ART_KEY_PAIR4Z4 = """
??
?? ??????
??????????
__
/ o\\
\_ /
<|
<|
<|
"""
ART_KEY_PAIR3BB = """ ? _
?? \\
? _ /
? |
? |
? |
(2A) (2B) encrypted
encryption form of (2)
key for (2B)
"""
ART_KEY_PAIR3AA = """ _ _
/o \\
\ _ /
< |
< |
< |
"""
ART_KEY_PAIR_SEP = """
__
/o \\_____
\__/-="="`
__
/ o\\
\_ /
<|
<|
<|
`
"""
ART_KEY_CHAIN = """
___________ @ @
/ (@\\ @
\___________/ _@
@ _/@ \\_____
@/ \__/-="="`
\_ /
<|
<|
<|
`
"""
ART_FROG_BLENDER ="""
___
_______|___|______
__|__________________|
\ ]________________[ `---.
`. ___ L
| _ | L |
| .'_`--.___ __ | | |
|( 'o` - .`.'_ ) | F F
| `-._ `_`./_ | / /
J '/\\ ( .'/ )F.' /
L ,__//`---'`-'_/J .'
J /-' '/ F.'
L ' J'
J `.`-. .-'.' F
L `.-'.-' J
|__(__(___)__|
F J
J L
|______________|
"""
####
# code
###
from PIL import Image
ASCII_CHARS = [ '#', '?', '%', '.', 'S', '+', '.', '*', ':', ',', '@']
def scale_image(image, new_width=100):
"""Resizes an image preserving the aspect ratio.
"""
(original_width, original_height) = image.size
aspect_ratio = original_height/float(original_width)
new_height = int(aspect_ratio * new_width)
new_image = image.resize((new_width, new_height))
return new_image
def convert_to_grayscale(image):
return image.convert('L')
def map_pixels_to_ascii_chars(image, range_width=25):
"""Maps each pixel to an ascii char based on the range
in which it lies.
0-255 is divided into 11 ranges of 25 pixels each.
"""
pixels_in_image = list(image.getdata())
pixels_to_chars = [ASCII_CHARS[pixel_value//range_width] for pixel_value in
pixels_in_image]
return "".join(pixels_to_chars)
def convert_image_to_ascii(image, new_width=100):
image = scale_image(image)
image = convert_to_grayscale(image)
pixels_to_chars = map_pixels_to_ascii_chars(image)
len_pixels_to_chars = len(pixels_to_chars)
image_ascii = [pixels_to_chars[index: index + new_width] for index in
range(0, len_pixels_to_chars, new_width)]
return "\\n".join(image_ascii)
def handle_image_conversion(image_filepath):
image = None
try:
image = Image.open(image_filepath)
except Exception as e:
# print "Unable to open image file {image_filepath}.".format(image_filepath=image_filepath)
# print e
return
image_ascii = convert_image_to_ascii(image)
print(image_ascii)
if __name__=='__main__':
import sys
image_file_path = sys.argv[1]
handle_image_conversion(image_file_path)