User:Jacopo/Prototyping: Difference between revisions
No edit summary |
|||
Line 3: | Line 3: | ||
<span style="color:black ;font-size:30px ;"> ↪Prototyping </span> | <span style="color:black ;font-size:30px ;"> ↪Prototyping </span> | ||
</div> <br><br> | </div> <br><br> | ||
=First Trimester= | |||
== Let's start == | |||
'''Morning Journey inside some individual experiments.''' <br> | |||
> Il Pleut Bot (from Federico)<br> | |||
<syntaxhighlight lang="python"> | |||
import random | |||
width = 10 | |||
height = 10 | |||
drops = [',',' ',' ',' '] | |||
rain = '' | |||
for x in range(width): | |||
for y in range(height): | |||
rain += random.choice(drops) | |||
print(rain) | |||
rain = '' | |||
</syntaxhighlight> | |||
> Responsive Form (from Louisa) | |||
<syntaxhighlight lang="python"> | |||
print('Enter your name:') | |||
name = input() | |||
print('Hello, ' + name + ". Are you ready to choose your own adventure? If yes, Type one of these words to kickstart the engine: hot, yellow, bright")<br> | |||
</syntaxhighlight> <br> | |||
> Differences between LOOP and WHILE <br> | |||
> Differences between FLAT LOOP and NESTING LOOP | |||
[[File:punchedcard.png|600px|right]] | [[File:punchedcard.png|600px|right]] | ||
==PIL== | |||
The Python Imaging Library (PIL) adds image processing capabilities to your Python interpreter. | |||
This library provides extensive file format support, an efficient internal representation, and fairly powerful image processing capabilities. It should provide a solid foundation for a general image processing tool. | |||
Blending two images: | |||
[[File:Blendprocess.png]] | |||
<syntaxhighlight lang="python"> | |||
Image.blend(use1.convert("RGBA"), use2.convert("RGBA"), 0.5) | |||
#The two images must have the same mode and size | |||
</syntaxhighlight> | |||
NOTEBOOK of the day: https://git.xpub.nl/XPUB/S13-Words-for-the-Future-notebooks <br> | |||
PAD of the day: https://pad.xpub.nl/p/2020-09-30-prototyping <br> | |||
==NLTK== | |||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
import nltk | import nltk | ||
Line 262: | Line 310: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Quilting, AALib == | == Quilting, AALib == | ||
Line 369: | Line 403: | ||
> http://aa-project.sourceforge.net/aalib/ <br> | > http://aa-project.sourceforge.net/aalib/ <br> | ||
> http://jwilk.net/software/python-aalib | > http://jwilk.net/software/python-aalib | ||
Revision as of 15:43, 11 April 2021
↪Prototyping
First Trimester
Let's start
Morning Journey inside some individual experiments.
> Il Pleut Bot (from Federico)
import random
width = 10
height = 10
drops = [',',' ',' ',' ']
rain = ''
for x in range(width):
for y in range(height):
rain += random.choice(drops)
print(rain)
rain = ''
> Responsive Form (from Louisa)
print('Enter your name:')
name = input()
print('Hello, ' + name + ". Are you ready to choose your own adventure? If yes, Type one of these words to kickstart the engine: hot, yellow, bright")<br>
> Differences between LOOP and WHILE
> Differences between FLAT LOOP and NESTING LOOP
PIL
The Python Imaging Library (PIL) adds image processing capabilities to your Python interpreter. This library provides extensive file format support, an efficient internal representation, and fairly powerful image processing capabilities. It should provide a solid foundation for a general image processing tool.
Image.blend(use1.convert("RGBA"), use2.convert("RGBA"), 0.5)
#The two images must have the same mode and size
NOTEBOOK of the day: https://git.xpub.nl/XPUB/S13-Words-for-the-Future-notebooks
PAD of the day: https://pad.xpub.nl/p/2020-09-30-prototyping
NLTK
import nltk
import random
lines = open('./language.txt').readlines()
sentence = random.choice(lines)
print(sentence)
Neocapitalism has also discovered some advantages in large scale. Day and night it talks of nothing but city planning and national development. But its real concern is obviously the conditioning of commodity production, which it senses escaping it unless it resorts to this new scale. Academic urbanism has accordingly defined “slums” from the standpoint of postwar neocapitalism. Its techniques of urban renewal are based on sterile, antisituationist criteria.
tokens = nltk.word_tokenize(sentence)
print(tokens)
['Neocapitalism', 'has', 'also', 'discovered', 'some', 'advantages', 'in', 'large', 'scale', '.', 'Day', 'and', 'night', 'it', 'talks', 'of', 'nothing', 'but', 'city', 'planning', 'and', 'national', 'development', '.', 'But', 'its', 'real', 'concern', 'is', 'obviously', 'the', 'conditioning', 'of', 'commodity', 'production', ',', 'which', 'it', 'senses', 'escaping', 'it', 'unless', 'it', 'resorts', 'to', 'this', 'new', 'scale', '.', 'Academic', 'urbanism', 'has', 'accordingly', 'defined', '“', 'slums', '”', 'from', 'the', 'standpoint', 'of', 'postwar', 'neocapitalism', '.', 'Its', 'techniques', 'of', 'urban', 'renewal', 'are', 'based', 'on', 'sterile', ',', 'antisituationist', 'criteria', '.']
It's important to realize that POS tagging is not a fixed property of a word -- but depends on the context of each word. The NLTK book gives an example of homonyms -- words that are written the same, but are actually pronounced differently and have different meanings depending on their use.
text = nltk.word_tokenize("They refuse to permit us to obtain the refuse permit")
nltk.pos_tag(text)
text = nltk.word_tokenize("They refuse to permit us to obtain the refuse permit")
nltk.pos_tag(text)
[('They', 'PRP'),
('refuse', 'VBP'),
('to', 'TO'),
('permit', 'VB'),
('us', 'PRP'),
('to', 'TO'),
('obtain', 'VB'),
('the', 'DT'),
('refuse', 'NN'),
('permit', 'NN')]
ASCII Canvas
width = 10
height = 10
# Simple fill-up of a page, to set the reach of our canvas
lines = [] # All the lines will be stored here
for linenumber in range(height):
line = '▄︻┻═━一' * width
lines.append(line)
print('\n'.join(lines))
▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一
▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一
▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一
▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一
▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一
▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一
▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一
▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一
▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一
▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一▄︻┻═━一
width = 20
height = 20
line = ''
for y in range(height):
# here i collect all the characters for one line
for x in range(width):
# check if the line "number" is odd or even
# to do this, you can use the "%", called the "modulo"
if y % 2 == 0:
line += '♫♫♫'
line += ' '
else:
line += ' '
line += '♪♪♪'
# print & reset
print(line)
line = ''
♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫
♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪
♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫
♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪
♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫
♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪
♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫
♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪
♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫
♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪
♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫
♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪
♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫
♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪
♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫
♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪
♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫
♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪
♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫ ♫♫♫
♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪ ♪♪♪
# Another way to fill-up the page
import random
lines = []
txt = open('./language.txt', 'r').read()
words = txt.split()
for linenumber in range(height):
word = random.choice(words)
length_of_word = len(word)
nr_of_words_fit_in_line = width / length_of_word
line = word * int(nr_of_words_fit_in_line)
lines.append(line)
print('\n'.join(lines))
postwarpostwarpostwarpostwarpostwarpostwarpostwarpostwarpostwarpostwar
ititititititititititititititititititititititititititititititititititititit
scale.scale.scale.scale.scale.scale.scale.scale.scale.scale.scale.scale.
“slums”“slums”“slums”“slums”“slums”“slums”“slums”“slums”“slums”“slums”
ButButButButButButButButButButButButButButButButButButButButButButButButBut
sterile,sterile,sterile,sterile,sterile,sterile,sterile,sterile,sterile,
criteria.criteria.criteria.criteria.criteria.criteria.criteria.criteria.
unlessunlessunlessunlessunlessunlessunlessunlessunlessunlessunlessunless
isisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisis
ititititititititititititititititititititititititititititititititititititit
ButButButButButButButButButButButButButButButButButButButButButButButButBut
nationalnationalnationalnationalnationalnationalnationalnationalnational
postwarpostwarpostwarpostwarpostwarpostwarpostwarpostwarpostwarpostwar
DayDayDayDayDayDayDayDayDayDayDayDayDayDayDayDayDayDayDayDayDayDayDayDayDay
ititititititititititititititititititititititititititititititititititititit
ofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofof
ofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofof
ononononononononononononononononononononononononononononononononononononon
isisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisis
ititititititititititititititititititititititititititititititititititititit
whichwhichwhichwhichwhichwhichwhichwhichwhichwhichwhichwhichwhichwhichwhich
neocapitalism.neocapitalism.neocapitalism.neocapitalism.neocapitalism.
basedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbased
antisituationistantisituationistantisituationistantisituationist
commoditycommoditycommoditycommoditycommoditycommoditycommoditycommodity
ititititititititititititititititititititititititititititititititititititit
newnewnewnewnewnewnewnewnewnewnewnewnewnewnewnewnewnewnewnewnewnewnewnewnew
butbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbut
advantagesadvantagesadvantagesadvantagesadvantagesadvantagesadvantages
neocapitalism.neocapitalism.neocapitalism.neocapitalism.neocapitalism.
defineddefineddefineddefineddefineddefineddefineddefineddefineddefined
ititititititititititititititititititititititititititititititititititititit
tototototototototototototototototototototototototototototototototototototo
concernconcernconcernconcernconcernconcernconcernconcernconcernconcern
basedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbased
ititititititititititititititititititititititititititititititititititititit
standpointstandpointstandpointstandpointstandpointstandpointstandpoint
“slums”“slums”“slums”“slums”“slums”“slums”“slums”“slums”“slums”“slums”
ofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofof
criteria.criteria.criteria.criteria.criteria.criteria.criteria.criteria.
ititititititititititititititititititititititititititititititititititititit
resortsresortsresortsresortsresortsresortsresortsresortsresortsresorts
production,production,production,production,production,production,
conditioningconditioningconditioningconditioningconditioningconditioning
discovereddiscovereddiscovereddiscovereddiscovereddiscovereddiscovered
basedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbased
sterile,sterile,sterile,sterile,sterile,sterile,sterile,sterile,sterile,
basedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbasedbased
ininininininininininininininininininininininininininininininininininininin
postwarpostwarpostwarpostwarpostwarpostwarpostwarpostwarpostwarpostwar
“slums”“slums”“slums”“slums”“slums”“slums”“slums”“slums”“slums”“slums”
butbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbutbut
ititititititititititititititititititititititititititititititititititititit
ofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofofof
thisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthis
nightnightnightnightnightnightnightnightnightnightnightnightnightnightnight
planningplanningplanningplanningplanningplanningplanningplanningplanning
sensessensessensessensessensessensessensessensessensessensessensessenses
nationalnationalnationalnationalnationalnationalnationalnationalnational
commoditycommoditycommoditycommoditycommoditycommoditycommoditycommodity
scale.scale.scale.scale.scale.scale.scale.scale.scale.scale.scale.scale.
thisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthisthis
planningplanningplanningplanningplanningplanningplanningplanningplanning
defineddefineddefineddefineddefineddefineddefineddefineddefineddefined
isisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisisis
Exporting with ReportLab – https://www.reportlab.com/
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm
pagewidth = 210*mm
pageheight = 297*mm
c = Canvas("ASCII-canvas-to-PDF.new.pdf", pagesize=(pagewidth, pageheight), bottomup=0)
c.setFont('Courier', 12)
start_y = 10*mm # start position of the lines
y = start_y
lineheight = 4*mm
if multipage == True:
for page in pages:
for line in page:
c.drawCentredString(pagewidth/2, y, line)
y += lineheight
c.showPage()
y = start_y
else:
for line in lines:
c.drawCentredString(pagewidth/2, y, line)
y += lineheight
c.save()
Making an ASCII art PDF using aalib, PIL, and reportlab
from PIL import Image
from urllib.request import urlopen
import aalib
#f = urlopen("Pongie.Undisciplined.Map.jpg")
im = Image.open("Pongie.Undisciplined.Map.jpg")
screen = aalib.AsciiScreen(width=200, height=160)
resized = im.convert("L").resize(screen.virtual_size)
screen.put_image((0, 0), resized)
lines = screen.render().splitlines()
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.pagesizes import *
from reportlab.lib.units import mm
from reportlab.pdfbase.ttfonts import TTFont, pdfmetrics
c = Canvas("setyourname.pdf", pagesize=A2, bottomup=0)
fontpath = "mplus-1m-regular.ttf"
font = TTFont('1mregular', fontpath)
pdfmetrics.registerFont(font)
c.setFont('1mregular', 14.4)
start_y = 0*mm
y = start_y
lineheight = 4*mm
for line in lines:
c.drawString(2*mm, y, line)
y += lineheight
c.save()
Quilting, AALib
Today's Goal: Making a A0 Quilt using different patches from XPUB1 Student.
We refer to Patch both as digital and physical part of the Quilt. In the early computer era, the Patch was a set of changes for a computer programme. To update, fix or improve the programme, new paper tape or punched cards were replacing the wrong segment, after being literally cut off.
PAD of the day: https://pad.xpub.nl/p/XPUB1_ONLINE_07_10_2020
Editing an image with: aalibb library
> http://aa-project.sourceforge.net/aalib/
#Patch 2
from PIL import Image
from urllib.request import urlopen
f = Image.open (urlopen("https://here's the link"))
g = f.convert("1") #for b&w
g.save ("bw.png") #to save a new copy
import aalib
screen = aalib.AsciiScreen(width=82, height=74) #size of the canvas
h = f.resize(screen.virtual_size).convert('L',dither=Image.NONE)
screen.put_image((0, 0), h)
print (screen.render())
from PIL import Image
from urllib.request import urlopen
f = Image.open (urlopen("https://2xawx0gmudy471po527lbxcd-wpengine.netdna-ssl.com/wp-content/uploads/2016/02/shutterstock_376367317-604x400.jpg"))
import aalib
screen = aalib.AsciiScreen(width=82, height=40) #size of the canvas
h = f.resize(screen.virtual_size).convert('L',dither=Image.NONE)
screen.put_image((0, 0), h)
print (screen.render())
WWBWBk6.)?!\WWBWWBWWBWWBWWBWWmr"'<ZwmWWBWWBWWBWWd()zS3XBWWBWW#???L]WWWBWWBWdf+2a2q
WmBBBWmWaa.4mBmWmBmBBmBBBmWmmmWQwmBmBBmWmBBmBBm#m[+oJSqmm4Wm'a'+WaWmWmBBmW#o3a-"4J
WmWmW#???J\]WTmmSmd#DmWmWBBBWBBmmWmWF"??gZBWBWBQnV/""{jWWwYwdadQBmmWmBB#WmW12c.]WW
WmPBB\]])jQWf!.-?ZZ##UdDmWmWmWmWBBBLmmm/)mW#BmBm12(.]WWmmmBBWBWWmWP?[/\y6]BkoX )BB
WmmaamgmBWBP=Jmma" !!##hZBBBBBBBBWBmX3m,j#ZWBWBZSn ]WmWWBWmBBBm[u'^\ajWmWmW12; 4W
WmWmmBBBBBB[#haA#[aac !4#m#BWmWmg]mXqm#[J##mmBBmvS, $mWmBmWBWmWL"$W$WWWmWmWm2X, $
4W9XU#WmWmWmD####ummmWa, "Z#ZmWmWZ]mWZ!{/.]#hBWmBEno.-WmWmWmWmWm?,<.)w4WmWmBmz2a -
_`o2123BBWmWmmgmmBWBWmWBa.J<mZWm()$mWmWWW/ $#dWmWm22s "VmZVU4BBLi|i);j|)WmWBWm22o,
3 X}moSmWmWmWBBmWmWmBBBBP<as )dW_mJWmWmmB6.]#ZmWmWmp2s .=XnnX$Bk|)k|;]+|)$mBBBWuS2
d:4n2S^WmWmWmBWP#"?#$BWm3#FX#,<D;<mWmWmWBW +##mWmWmW2S2Y)2?FoXmm=|=|;- <|)$mWmWBm1
g5,:!<jWBBBBBW###mc:QmBB3U6{m[+A)WmWmWmWmB, ##BBBBWmBwoX.{2nS>WmWwwamQ, \|)BBWmBmQ
Wmmma:WWmWmWmB6#L%m,jS$mmX##Z<LaaBWmWmWmWB' m#WmWmBBWmmZ6:"!\jWmWmmBBmW/ +|)WmWmWm
?!,/a(mmWmWmWBW#Lm#'y#mmBW6ajWBmWmBBBBBPme u##BBBWBBBBBmQdQa"mWmWmWmWBBB:-%|$mBWmW
a!aa#$BWP?BWmBmmF!'/dmEmWmBWBBBWmWmWmW6m#mL:5ZWmWmBWmWm??e:J'WmWmWmWmWmWL.:|)Wm/W?
BmP1||.'<(DmWBWmBmg ]mkmWmWmBWmWmWmWmWU#CJm;jXBWmW4B]mF/(aw#WWBBBBBBWmWmW =||BWBwW
WB%|a+i.4a)]BmWmWBW )#2WmWmWEF=_]4WmWmD#md#.]WmBBB(mmadWmBmmWmBWmWmWmBm!_=)w|3mBBm
Wm>|)=i.%W7<)WmWmWm ]#CWmWmCP_|i|{WmWmBd!!`jmY[/wawWmWmWmWBWmWmBWmWmWmE|||(-k]WBWB
Wmc<|>~<$mmaZ4BBBBF ]#mWmWDjf=|yziBBBWmBmm,Z<_<aBm'r#4mWmWmWmWmWmWmWmWC|m>|-kmBBmW
WmW6 <)tdWmBm[WmWm[ m#XWmBL|k-|||jmWmWmWBW6LmW#6%']6'\Y4WmWmWmWmWmWmWmk|+|;<5mBWmW
WmW( /ismWmWmwPT?Y _mZBBBWC|]i%=wmmWmWmWmBBWmm###6 9QJ)/9mBBBBBBBBBBBBmw%samWmWmWm
Wm( _||mWmWmW\##m/\$#$mWmBL|| :WmmBBBBBBWmWmW]mmJ# j4BmWm7mWmWmWmWmW#WmWmBmBmWmWmW
B' ;|>dWmWmW#mm3#h-@ZmBBWmW+|, WmWBWmWmWmWmWmJmddP.JmBBmWLWmWmDU_7?'j]WmWmWmBYY$mB
.=|>yWmWmWmmmmm#[_EmmWmWmWc|; 4WmWmWmWmWmWmWWw??_JWmWmWmWmWmWv23S()m)/$mWZ||=|=Y?
_i|vmWmWmWmWBJ!!!.JmmWmWmWm6|) "WBBBBBBWmWmWmmWm[ m#XWmWmWmBBho({or.mL)a$m<|)z|>__
||wWmWmBBBBBmBm/]qB??4Wm]WmWc|= ]WmWmWmBBBBBBWmW( ##mBBBWmWmWg2222'j4Wc-4BF<|i~:J|
wmBmWmWmWmWBWBW[Pa_(Z<dwdWmWm<|, )_i|]$mWmWmWmWm _mhBBWmWmWmWm6}^_wCmWmB6]W%/_wJ||
WmWBW4mmPWmWmBmQdmwmmmWmWmWmB6||3 isr|]WmWmWmWm( Jm$mWmWmWmWmBB'.o23WmWmPjBm6waadB
WmWmd#S#m"BBBWmmBWmW?4D?BBBBWBg|L.i=\+)WBBBBBWP )#DmBBBBBBBBBW[ =X2WBWmWmWmWWmWWBW
WmB[mZ\Xm-!{?BWBWmWm k'\tcP?BBm6j/=<|/\Wm$mZa? _WZWmWmWmWmWmW" _XemmWmWm4###m4WmBm
WmWm"W#m!.m{JWmWmD!~-YWmaaJB/WBWWm=% jWBAZ44Z am#qmBmUo2s4mP'.Jo2dWmWmBZ4#mq#LmBWB
WP?'`/..s3@_/QWmBJn2d,]W#mBW\WB?????c4WB#6udF.W#mmBBoorz2(, _dn2mBWmWmWC:4hd#'QmBB
ajmW@mm[?9WmBfo(4o(.k$mWmJ??/[('madWm7??! y#m#mWm{XGor~LXXoSmmBBBBWmW5,.!`7- -
mBm##$qmBW[]w#BWmXoJ2(<5dWmWmWWmBBWWmBBmm6a_VmdWmWmBL"!':yoSqdWmWBWmWmWmm$BHh##waw
$#mdWmWmWmBf#BBmBm}}"/!ooWmWmWm?wwwZmWmWWmmWmBWmWmWmBme3HvmdBWmWmWmB#YYYYYmmZVZ#ZY
BmWmWm?9mWY\WBWBWmmWW[ oS3WmWmfd#S##JBWmBWBBWm#m#4WmWmWmBBmWBmWmWTY=i|<w??\WmBWmWB
W9as/'j\P4mWBBmWmWmWm[ )o$mPa,.4mzd#LWmWmBBBPdmY#m4BBWmWmWBBBW#Y+||>~-7__=<-$mWmBB
6#2Sm;]6]%4WmWBBBBBBB[ )odWBa4w ?#Z?jmWmWmWBFmLJW#+mWPsWmWmWmY=||" . __|s=c)]WmWmW
]#<h#(]WL)\WmWmWmWmWmf.)ommL-]h6asa) ??????\!##!'w#B[WmWmWZ(|>` _aBWWz||T(|jWmWmW
2###7.ZWWLa%$mWmWmWmW[ o2dWZo(mWwvm#6as. _ac_aJwmWmJ4mWZ<w< _jWBBBmmawawdWBWmWm
Wa}.wJdBBWBW]BBBBBP?Y-.S2dWma_QmWm6BX#U##mmmBmq#3mWBWZ) WD7( 'WmWmWmWWmmBmWmWmWmW
Links
Check-in:
> https://www.effbot.org/imagingbook/pil-index.htm
> https://pillow.readthedocs.io/en/stable/
Library Sources to work with Images and ASCII:
> http://aa-project.sourceforge.net/aalib/
> http://jwilk.net/software/python-aalib