昨天发布了一个在终端里展示个人资料的小玩意 https://www.v2ex.com/t/1176162
但是有些朋友评论说: "不够帅, 不够帅"
熬了一个通宵, 现在更新支持 GIF / IMAGE / Markdown , 绝对能满足大部分的创作需求了.
效果展示:
在线体验:
命令行里运行: curl -N me.pdjjq.org
我实在不知道该起什么名字, 最开始是想要做一个有意思的展示简历的小玩意. 但是现在感觉只会变成一堆蔡徐坤/奶龙的 gif.
1
Alias4ck 4 天前
建议多看看 ascii art
另外你这个还需要网络( 完全没必要啊 直接做成 cli 不行? |
2
Mark24 4 天前
挺有意思的,感谢主包
|
3
Kaisar 4 天前
刷新率跟不上
|
4
cmos 4 天前
这个很有意思,看了一下原理和设计,用 Golang 更健壮一些,包括内容和图像的可变化性。time.Ticker 配合 goroutine ,循环发送。用 fatih/color 或者直接写 escape sequence 也行。
|
5
tsvico 4 天前
今日天气能支持吗
|
6
pDJJq OP @Alias4ck ASCII Art 的表现能力怎么能和图像相比呢? 目的就是在所有的终端里不做任何配置都能显示, curl 就是最好的选择, 谁会去`apt install xxx` 再去运行就只为了看个动态图像呢?
|
8
arfaWong 4 天前
|
9
codehz 4 天前
缺少一个垂直同步,我记得可以使用 CSI?2026h 来同步
|
10
Tink PRO |
11
realpg PRO 这是什么原理?
正常 curl 的输出不是顺序的 |
12
Alias4ck 4 天前
@pDJJq 哥们 你 docs 里面写的就是这个啊 图片/GIF 转 ASCII 艺术(支持彩色)
突然来句怎么和图像对比. 你也没实现图像啊 真正的图片显示也不是你这种啊 只有支持图片协议的终端才有比如 kitty /ghostty/iterm ![]() |
13
HTravel 4 天前
你如果能理解终端显示的就是一维的字符流,然后通过 ESC 字符切换到控制模式来更改接下来的字体颜色、背景、闪烁、清除当前行、换行什么的,然后各个终端软件自然还能继续扩展,在 ESC 字符切换到控制模式后用另外的命令字来表示接下来的是图片、视频什么的。你就会发现,但凡你 GUI 编程时自绘过组件,就会发现让终端显示这些东西了然无趣,压根没任何技术难点。
甚至你可以直接解析这个字符流,将其转换为 HTML ,直接在浏览器中看到你想要的效果。HTML/CSS/JS 实现这一切很难么? |
16
pDJJq OP @HTravel
当前是通过 curl + 控制字符实现的.和 TUI 相比环境相当受限: 单向接收消息, 无系统信息, 网络延迟. 不如你写个 demo? 给看看怎么通过 curl + Terminal 做更复杂功能. 我对 terminal 以及 termimal 支持的 Graphics Protocol 了解的并不多, 看看你的. |
19
HTravel 4 天前 @pDJJq 我闲的蛋疼玩这种?我之所以清楚,就是因为终端中有些效果与 GUI 中不一致,我为了让我的软件能同时在两种环境下运行且运行效果尽可能一致,才了解了下终端原理。最后发现,终端做到极致,不就是另一个 GUI 吗?那我直接在终端中打开 GUI 界面不就行了嘛。
我愿意花时间做的软件,都必须是能用一辈子那种。所以数据同步、增备、全备、快照,这类软件我全部自己实现了一遍。以及针对不同数据,比如文本类看小说、音频类听音乐、视频类看影视综艺、剪贴板在能支持浏览器上就能跨设备同步这种,我都给自己写了一套,并且能通过 termux 放到安卓里面完全跑起来,且挂后台不耗电。 至于其他的,我想想原理就行了,不可能投入时间的,完全不值得。 |
22
Alias4ck 4 天前
|
23
yeelooyeeuu 4 天前
这是什么原理?
|
24
tf2 4 天前
虽然猜到原理不难,但是把别人喷一顿是为啥。。。?
哥伦布有啥厉害的,不就是一个劲儿向西划船么。。对不? |
25
pDJJq OP @yeelooyeeuu
通过 terminal 中的控制字符实现的. 如果你感兴趣可以看看这里: https://en.wikipedia.org/wiki/Control_character 一些新的 terminal 支持图像协议, 性能和效果会更好, 比如说 kiktty 的: https://sw.kovidgoyal.net/kitty/graphics-protocol/ 我不是实现的高手, 和 claude code + gemini 确定的. |
26
pDJJq OP @realpg
通过 terminal 中的控制字符实现的. 如果你感兴趣可以看看这里: https://en.wikipedia.org/wiki/Control_character 一些新的 terminal 支持图像协议, 性能和效果会更好, 比如说 kiktty 的: https://sw.kovidgoyal.net/kitty/graphics-protocol/ 我不是实现的高手, 和 claude code + gemini 确定的. |
27
pDJJq OP Love from DJJ 😘
|
28
HTravel 4 天前
@Alias4ck 这种没啥意思。我以前还在 Excel 绘过画呢,给我任何一张照片,我都能原封不动的画出来。原理很简单,每个单个格看作一个像素,然后用 POI 操作 excel 文档来填充这些单元格的背景即可。
记得日本还真有人在 Excel 作画,他们把这叫绘画仙人,认为牛逼的不行。我随便出手,就能做祖师爷 |
29
HTravel 4 天前
@Alias4ck 其实终端是有多行组成的,每行又必须是同样高度和宽度的等宽字符。也就是说,终端是可以看作 m x n 列的 Excel 单元格的,且每个单元格中只能放一个字符。原理就这么简单。
所以,你把 Excel 单元格边框去掉,背景涂黑,然后通过 VBA 操作一个个单元格,你就能模拟出终端软件,以及终端中跑着的这类动态效果。 |
30
windyskr 4 天前
太有趣了
|
31
stillywud 4 天前
大神好多,收藏~
|
33
635925926 3 天前
@tsvico 试试 curl wttr.in/Hangzhou
|
36
HTravel 3 天前
@Alias4ck 如果我说我会用 HTML 或 Java 这类模拟一个 Windows 3.2 的软件 GUI 界面,你们会觉得很牛逼吗?一个 UI 新人也搞得出来啊。
你们现在觉得牛逼的终端显示动态内容,早在 Windows 3.2 之前就成熟了。但当年大家只会认为 windows 3.2 GUI 是真牛逼,终端 TUI 是真落后。 你们花点时间了解下终端显示原理,明白它就是无限读一个字符串。其实你自己就能通过 HTML 画布把常见的终端显示效果模拟出来。甚至在终端里面显示图片、音乐、视频都不成问题。真做完这个,你会发现这不就是个功能受限的浏览器嘛。难道在浏览器里面让自己实现字符串、图片、音乐、视频的显示和播放很难? 甚至现在你都不需要自己写代码。你问下 AI ,终端显示原理是不是把屏幕看作 m x n 的一个个小格子,然后每个格子中只能显示一个字符?你写代码读一串字符串,将每个字符填充到 m x n 的字符数组里,这很难?你可以让 AI 直接给你写出这个终端软件来玩,根本没多少行代码。 |