November 30, 2019

创建动图模拟 CRT 逐行显示

前些天看见有人慢镜头拍 CRT 显示器,才知道原来 CRT 某一时刻只显示一行,感觉好酷啊!于是就想着能不能写段程序模拟一下,看看任意图片在 CRT 逐行显示的效果下是什么样的(没钱买 CRT 显示器)。

程序主体就是这个循环:

frames = []
box = (0, 0, width, ROW)
for i in range(0, height, ROW):
    region = im.crop(box)
    blank = Image.new(im.mode, im.size)
    blank.paste(region, box)
    frames.append(blank)
    box = (0, box[3], width, box[3] + ROW if box[3] + ROW < height else height)

裁几行,存起来,裁几行,存起来:先用crop根据 box 的左、上、右、下四个参数裁剪图片,然后用paste粘贴到新创建的空白(黑色)图片上,再把新图片放到列表里以备保存成 gif 。

因为 CRT 显示器可以以 kHz 为单位一行一行显示图像,而现在的显示器顶天以 480Hz 整张整张图像显示,要是每帧只显示一行像素没法模拟 CRT 的视觉残留,所以 ROW 其实是个十位数(即每帧显示几十行像素)。

最后结果真的闪瞎眼,所以我折叠了。调小 ROW 和 FPS 可以缓解闪烁感,但就没慢放 CRT 内味了。

==点击这行看效果图==(如果患有癫痫,或者身体不舒服的话就不要点了)blind my eyes!

完整代码在这里

2019-12-21

gif 就是个烂格式!本身帧与帧的间隔是以 1%秒为单位设置的,但显示器 144hz/60hz 的刷新间隔都对不上 1%秒,这就导致基本调不到想要的帧数(之前用 imageio 设置 fps=60 保存下来的 gif 用 pillow 读取发现 duration 是 20 毫秒,就是约到 1%秒的结果)。

另外这程序改几行可以把巨长图片转成分页的 pdf:1536×44938 的图片,想看一眼还得先缩放半天。直接转成一页的 pdf Edge 打开是乱的,火狐能正常打开,但特别糊。怀疑是到了单页分辨率极限了。分页后 Edge 就能正常打开了,而且和图片一样清楚。

如无特殊声明,本页内容采用 CC BY-NC 4.0 授权


Made With Notepad