自定义shell命令--闪烁的字母(PIL实现)
之前看到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