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

大致效果如下:

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

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

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

先说第一步:

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

 from PIL import Image
import argparse
import time

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

 parser = argparse.ArgumentParser()

 parser.add_argument('file')  #input file
parser.add_argument('--width', type = int ,default = 150) #output_string width
parser.add_argument('--height' , type = int , default = 48) #output_string height #get args
args = parser.parse_args()
9
10 IMG = args.file
11 WIDTH = args.width
12 HEIGHT = args.height

随便定义一个accii:

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

写RGB转字符的函数:

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

写主函数:

 if __name__ == '__main__':

     im = Image.open(IMG)
im = im.resize((WIDTH,HEIGHT) , Image.NEAREST) txt = "" for i in range(HEIGHT):
for j in range(WIDTH):
txt += get_char(*im.getpixel((j,i)))
txt += '\n' print(txt)
time.sleep(0.8)

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

然后开始第二部分:

编写如下shell命令:

 #!/bin/bash
while true
do
python3 ~/pythonFile/xfqz/toPIC.py ~/Pictures/w.jpg
python3 ~/pythonFile/xfqz/toPIC.py ~/Pictures/h.jpg
python3 ~/pythonFile/xfqz/toPIC.py ~/Pictures/y.jpg
python3 ~/pythonFile/xfqz/toPIC.py ~/Pictures/z.jpg
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

自定义shell命令--闪烁的字母(PIL实现)的更多相关文章

  1. recovery 升级过程执行自定义shell命令

    有时候我们需要,在升级的过程中,执行一些shell命令,来完成我们的一些需求,利用升级过程,进行一些特殊化的操作,思路如下: 第一: 把我们需要执行的命令,写成一个test.sh脚本,然后在recov ...

  2. 100个Shell脚本——【脚本4】自定义rm命令

    [脚本4]自定义rm命令 linux系统的rm命令太危险,一不小心就会删除掉系统文件. 写一个shell脚本来替换系统的rm命令,要求当删除一个文件或者目录时,都要做一个备份,然后再删除.下面分两种情 ...

  3. 好用的shell命令行: fish的配置

    fish的可视化配置命令: $ fish_config 其配置文件夹为 ~/.config/fish. 1.要设置环境变量,在配置文件夹里新建 config.fish 文件,它会作为fish 启动时的 ...

  4. shell命令大全笔记

    ## -print 将匹配的文件输出到标准输出## -exec 将匹配的文件执行该参数所给出的shell命令## -ok 将匹配的文件执行该参数所给出的shell命令,每次执行命令有提示 #----- ...

  5. Linux常见的Shell命令

    1.具体的shell命令用法可以通过help或man命令进入手册来查询其具体的用法.2.终端本质上对应着linux上的/dev/tty设备,linux的多用户登录就是通过不同的/dev/tty设备完成 ...

  6. Shell命令行操作

    1.1 shell提示符 [me@linuxbox ~]$ 如果最后一个字符是"#",表示当前终端会话有超级用户权限.使用root用户登录或者使用能提供超级用户权限的终端能获得该权 ...

  7. bash shell命令(2)

    在上篇<bash shell命令(1)>中,介绍了几种简单的linux shell命令,今天继续介绍bash shell命令 本文地址:http://www.cnblogs.com/arc ...

  8. vim中执行shell命令小结

    vim中执行shell命令,有以下几种形式 1):!command 不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容 例如:!ls -l ...

  9. 第四章:更多的bash shell命令

    第四章:更多的bash shell命令 监测程序 ps (其他ps内容见#1 ) Unix风格的ps命令参数 参数 描述 -A 显示所有进程 -N 显示与指定参数不符的所有进程 -a 显示除控制进程( ...

随机推荐

  1. [转]Sql Server Report Service 的部署问题

    本文转自:https://www.cnblogs.com/syfblog/p/4651621.html 近期在研究SSRS部署问题,因为以前也用到过SSRS报表,但当时开发的报表是有专门的集成系统的, ...

  2. ado.net中事务的使用

    ADO.Net中也提供了事务处理功能,通过ADO.net事务,可以将多个任务绑定在一起,如果所有的任务成功,就提交事务,如果有一个任务失败,就讲滚回事务 执行ADO.Net事务包含四个步骤,接下来以S ...

  3. 使用<% =Type%>获取后台值时报错:控件包含代码块(即 <% ... %>),因此无法修改控件集合。

    <% =Type%>不能放在runat="server"的标签中,删掉runat="server"之后dev的控件回调第一次发生时会刷新页面,有ru ...

  4. Element ui 中使用table组件实现分页记忆选中

    我们再用vue和element-ui,或者其他的表格的时候,可能需要能记忆翻页勾选,那么实现以下几个方法就ok了 示例如下 <el-table :data="tableData&quo ...

  5. 【代码笔记】iOS-iOS图片的原生(Graphics)

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  6. 倒计时5,4,3,2,1css实现(count down from 5 to 1 using css)

    //count down from 5 to 1, a useful animation. show the code to you:   <!DOCTYPE html> <html ...

  7. js/jq动态创建表格的行与列

    之前做了一个项目,需求是能动态创建表格行,动态创建表格的列,度了很多资料,都没有动态创建列的插件,所以自己动手写了一个 需求大概是(下图) 1.动态添加一行.2.动态添加一列,3.删除行.4.删除列, ...

  8. 初识js-charts和E-charts

    在前端开发的过程中,经常会使用到图表相关的东西,很多时候,图表在展示数据方面有着无与伦比的优势.下面我们就来看看两个常用的图表相关的插件jscharts和ECharts.前者,功能相对单一,但是不依赖 ...

  9. 关于Datastage资料库的一点小发现

    这里的资料库,指的是Datastage Metadata层,在Datastage7.5以后,需要在安装Datastage时安装一个数据库用于存放用户数据. 昨天领导要求安装Datastage集群/高可 ...

  10. Java线程池相关类-Executor框架

    1.Executor 接口源码: public interface Executor { /** * Executes the given command at some time in the fu ...