Initial commit
This commit is contained in:
commit
4e0849e349
1 changed files with 88 additions and 0 deletions
88
pixelterm.py
Executable file
88
pixelterm.py
Executable file
|
|
@ -0,0 +1,88 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import os, sys, argparse
|
||||
from pygments.formatters import terminal256
|
||||
from PIL import Image, PngImagePlugin
|
||||
|
||||
def termify_pixels(img):
|
||||
sx, sy = img.size
|
||||
out = ''
|
||||
formatter = terminal256.Terminal256Formatter()
|
||||
def bgescape(color):
|
||||
r,g,b,a = color
|
||||
if color == (0,0,0,0):
|
||||
return terminal256.EscapeSequence(bg=formatter._closest_color(0,0,0)).reset_string()
|
||||
return terminal256.EscapeSequence(bg=formatter._closest_color(r,g,b)).color_string()
|
||||
def fgescape(color):
|
||||
r,g,b,_ = color
|
||||
return terminal256.EscapeSequence(fg=formatter._closest_color(r,g,b)).color_string()
|
||||
#NOTE: This ignores the last line if there is an odd number of lines.
|
||||
for y in range(0, sy-1, 2):
|
||||
lastfg, lastbg = None, None
|
||||
for x in range(sx):
|
||||
coltop = img.getpixel((x, y))
|
||||
colbot = img.getpixel((x, y+1))
|
||||
if coltop[3] != 255:
|
||||
coltop = (0,0,0,0)
|
||||
if colbot[3] != 255:
|
||||
colbot = (0,0,0,0)
|
||||
if coltop == colbot:
|
||||
if lastfg == coltop:
|
||||
out += '█'
|
||||
elif lastbg == coltop:
|
||||
out += ' '
|
||||
else:
|
||||
out += bgescape(coltop)
|
||||
lastfg = coltop
|
||||
out += ' '
|
||||
else:
|
||||
if coltop == (0,0,0,0):
|
||||
if lastfg != colbot:
|
||||
out += fgescape(colbot)
|
||||
lastfg = colbot
|
||||
if lastbg != coltop:
|
||||
out += bgescape(coltop)
|
||||
lastbg = coltop
|
||||
out += '▄'
|
||||
elif colbot == (0,0,0,0):
|
||||
if lastfg != coltop:
|
||||
out += fgescape(coltop)
|
||||
lastfg = coltop
|
||||
if lastbg != colbot:
|
||||
out += bgescape(colbot)
|
||||
lastbg = colbot
|
||||
out += '▀'
|
||||
elif lastbg == coltop:
|
||||
if lastfg != colbot:
|
||||
out += fgescape(colbot)
|
||||
lastfg = colbot
|
||||
out += '▄'
|
||||
elif lastbg == colbot:
|
||||
if lastfg != coltop:
|
||||
out += fgescape(coltop)
|
||||
lastfg = coltop
|
||||
out += '▀'
|
||||
else:
|
||||
if lastfg == coltop:
|
||||
out += bgescape(coltop)
|
||||
lastbg = coltop
|
||||
out += '▀'
|
||||
elif lastfg == colbot:
|
||||
out += bgescape(colbot)
|
||||
lastbg = colbot
|
||||
out += '▄'
|
||||
else:
|
||||
out += fgescape(coltop)
|
||||
lastfg = coltop
|
||||
out += bgescape(colbot)
|
||||
lastbg = colbot
|
||||
out += '▀'
|
||||
out += '\n'
|
||||
return out
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser(description='Render pixel images on 256-color ANSI terminals')
|
||||
parser.add_argument('image', type=str)
|
||||
args = parser.parse_args()
|
||||
img = Image.open(args.image).convert("RGBA")
|
||||
print(termify_pixels(img))
|
||||
Loading…
Add table
Add a link
Reference in a new issue