首页 > 技术文章 > 自定义shell命令--闪烁的字母(PIL实现)

whyaza 2018-08-09 19:25 原文

之前看到shell命令行,有人写过漫天下字母的cmatrix,想自己动手用python写一个类似,但是比较有自己风格的shell屏保

大致效果如下:

 

 

制作这个的大体思路比较简单:

1.利用python的PIL的库,进行图像转换屏幕字母的绘制  

2.运行此程序,作为一个命令使用

先说第一步:

以下是所需要的库:PIL用于绘图,argparse用于给python程序提供入口参数,time用于每个图片的切换间隔

1 from PIL import Image
2 import argparse
3 import time

下面添加所需要的入口参数:这里width,height就是屏幕的宽高

 1 parser = argparse.ArgumentParser()
 2 
 3 parser.add_argument('file')  #input file
 4 parser.add_argument('--width', type = int ,default = 150) #output_string width
 5 parser.add_argument('--height' , type = int , default = 48) #output_string height
 6 
 7 #get args
 8 args = parser.parse_args()
 9 
10 IMG = args.file
11 WIDTH = args.width
12 HEIGHT = args.height

随便定义一个accii:

ascii_char = list("~!@#$%^&**()-=[];'\,./_+{}|qwertyuiopasdfghjklzxcvbnmQAZWSXEDCRFVYHIKJMPLH;'./,")

写RGB转字符的函数:

1 def get_char(r , g , b , alpha=256):
2     #RGB值轉換爲字符值
3     if alpha == 0:
4         return ' '
5     length = len(ascii_char)
6     gray = int (0.2126 *r + 0.7152* g + 0.0722 * b)   #灰度值計算公式
7     unit = (256.0 + 1) /length
8     return ascii_char[int(gray/unit)]

写主函数:

 1 if __name__ == '__main__':
 2 
 3     im = Image.open(IMG)
 4     im = im.resize((WIDTH,HEIGHT) , Image.NEAREST)
 5 
 6     txt = ""
 7 
 8     for i in range(HEIGHT):
 9         for j in range(WIDTH):
10             txt += get_char(*im.getpixel((j,i)))
11         txt += '\n'
12     
13     print(txt)
14     time.sleep(0.8)

至此,一个分辨率不高的图片就可以转换成字符形式的了,如下:

然后开始第二部分:

编写如下shell命令:

1 #!/bin/bash
2 while true
3 do
4     python3 ~/pythonFile/xfqz/toPIC.py ~/Pictures/w.jpg
5     python3 ~/pythonFile/xfqz/toPIC.py ~/Pictures/h.jpg
6     python3 ~/pythonFile/xfqz/toPIC.py ~/Pictures/y.jpg
7     python3 ~/pythonFile/xfqz/toPIC.py ~/Pictures/z.jpg
8 done

其中,w.jpg,h.jpg,y.jpg,z.jpg,都是网上随便找到的,你也可以自己找,

将这个文件另存为whyz.sh

在.bashrc进行命令配置:

alias whyz='bash ~/pythonFile/xfqz/whyz.sh'

 注意的事,whyz='命令'   这其中不要有空格,然后,保存退出,

再次进入bashshell 就可以得到whyz的炫酷命令了~ 

 

ps:

在linux在制作gif动图也很简单:

1.两个工具:一个是simplescreenrecorder用于屏幕录制(其他的屏幕录制软件也可以),一个是ffmpeg,用于将视频格式转换为gif动图格式

使用如下命令

ffmpeg -i input.ogg -s 640x320 -r 15 output.gif    

推荐阅读