用40年前的电脑打开《花花公子》封面女郎图片,这可能吗?

源码共读

共 4498字,需浏览 9分钟

 ·

2022-02-12 02:29

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇


大数据文摘出品


搞过图像处理的同学应该都认识这位吧?



这位名叫Lena Forsen的模特,自从在上世纪70年代被南加州大学信号与图像处理研究所的助理教授Alexander Sawchuk用作测试图片后,就一发不可收拾,成为图像行业标准,被学者们复制和重新分析了数十亿次。


可以说,她是整个计算机图像处理领域的“女神”。


Medium上一位博主突然产生了一个想法,在那些几十年前古老的计算机上,能够显示“女神”Lena Forsen的这张经典照片吗?


最古老的可以显示照片的计算机,又是哪一款呢?


好像还有点意思,我们一起来看看。


远在图像产生之前


我们现在熟悉的图像格式其实离我们并不远。JPEG 图像格式于1993年推出,GIF于1987年发布。


那远在这些图像格式诞生之前,有没有可能显示图像呢?


70年代的大型机和超级计算机确实能够处理照片图像,但那离普通人太远了。


第一台个人电脑 Altair 8800于1975年发布,用户可以通过开关进入程序,并通过Led灯观看结果:



显然这玩意是不能显示图像的。


在70年代末,搭载CP/M OS的计算机出现了,这是一个完全成熟的操作系统,有文件系统、磁盘驱动器、编译器、程序和游戏。但是有一个问题—— CP/M UI只是文本。


从理论上讲,我们可以用 ASCII 图形来显示下面的内容:



但是这显然是一种作弊的手法,不能算数。


再往后来呢?


一些CP/M OS机器,比如Visual 1050计算机,是有图形功能的,但是没有通用的标准。



最早可用于CP/M的格式之一是RLE,它对黑白图像进行编码,分辨率为256×192。


我们终于能看到“女神”了!


虽然实际上图片可能看起来像这样:



正如我们所看到的,它远非完美,但仍然比纯ASCII好得多。这种格式的单色图像大小约为6 KB,因此在CP/M 90 KB软盘上,最多可以保存14张这种质量的照片。


后来计算机硬件变得更加强大。


1981年,CGA(彩色图形适配器)被引入,MS-DOS计算机能够显示4种颜色的高达320x240分辨率的图形。


这种品质的图片可能看起来像这样:



这种格式的图像大小约为40 KB,因此在一张360 KB 的软盘上可以放置大约8张图像。几年后,1987年推出的 VGA 适配器能够显示256张彩色图像,这些图像就更真实了。



这张图片的大小是77kb,所以5-6张图片可以保存在一张720kb的1.44英寸的磁盘上。


后来,80年代末推出的 SVGA (高级视频图形阵列)适配器能够使用16M颜色显示高达1280x1024分辨率的逼真图像,这实际上与我们今天所用的颜色非常接近了。


其他的计算机模型在80年代和90年代也可以使用(苹果,Commodore,ZX Spectrum等等),它们都可以显示不同类型的图形。


先有图像还是先有图像格式?


先有鸡还是先有蛋?先有图像还是图像格式?


肯定是图像。


在最简单的情况下,“格式”是不需要的,单色图像只是一个位序列:



因此,如果我们知道图像的宽度和高度,并且计算机具有图形功能,那么每个开发人员都可以制作一个程序,从二进制文件中显示图像“原样”。


顺便说一下,在谈论“自定义”图像格式时,提到1985年发布的游戏“脱衣扑克”(Strip Poker)也很有意思:


                       


我们可以看到,在第一个屏幕,玩家可以选择两个人物之一,“苏姿”或“梅丽莎”,第二个屏幕是游戏本身。如果我们打开游戏文件夹,很容易看到这两个人物的数据文件只是保存“原样”,根本没有压缩,所有文件大小相同:


1:03 AM             71 Melissa.txt12:18 AM           5768 Melissa1.pic12:18 AM           5768 Melissa2.pic12:19 AM           5768 Melissa3.pic12:20 AM           5768 Melissa4.pic12:21 AM           5768 Melissa5.pic5:40 AM             35 Opn.txt12:04 AM           5768 Opps.pic12:59 PM          50304 Poker.exe1:06 AM           1288 Screen.pic12:03 AM           5768 Stitle.pic5:09 AM             69 Suzi.txt12:02 AM           5768 Suzi1.pic1:33 AM           5768 Suzi2.pic12:00 AM           5768 Suzi3.pic12:01 AM           5768 Suzi4.pic12:00 AM           5768 Suzi5.pic



游戏开发者尽最大努力缩小尺寸:每个文件的大小只有5768字节!


这样我们只能得到320x18的灰度图像。事实上,我们可以使用 Python 打开 pic-file,看到许多细节缺失:



也许游戏使用了单独的背景图片或者通过编程方式绘制了一些细节(比如垂直线) ,开发人员肯定使用了一些技巧来有效地在320x240的屏幕上显示320x18的图片。


他们为什么要花这么多精力呢?


答案很简单ーー当时许多计算机根本没有硬盘驱动器,因此在软盘上写入游戏的能力至关重要。


正如我们已经知道的那样,第一张软盘的大小只有360 KB——这不仅对于游戏而言已经足够了,对于 MS-DOS 引导文件也是如此。开发者实际上做到了,游戏的大小只有140 KB。


当然,“按原样”保存图像可能会占用空间,开发人员试图找到更好的方法来保存数据。


最早的图像编码方法之一是RLE (游程编码)。在这种格式下,每个数据块都存储在‘count,value’对中,这样可以更有效地保存图像。


作为一个简化的例子,黑白点序列“ bwwbwwwwww”可以保存为“1B3W1B4W”。正如我们所看到的,它更加紧凑,可以用于图形或表格,但是对于真实感图像,“压缩”的图像甚至可以比原始图像更大。


最早被广泛使用的格式之一是 PCX (PiCture eXchange) ,它于1985年推出。这种格式也使用 RLE 编码,正如我们看到的,头部字段存储了大量附加信息:


// Standard PCX header (C/C++)struct PCXHeader {char   ID;           // ID, always 0x0Achar   Version;      // The version numberchar   Encoding;     // Use of encoding (0, 1)char   BitPerPixel;  // 1, 2, 4 or 8short  X1;   // The minimum x-coordinate of the image positionshort  Y1;   // The minimum y coordinate of the image positionshort  X2;   // The maximum x coordinate of the image positionshort  Y2;   // The maximum y coordinate of the image positionshort  HRes; // The horizontal image resolution in DPIshort  VRes; // The vertical image resolution in DPIchar   ClrMap[16*3]; // The EGA palette for 16-color imageschar   Reserved1;char   NumPlanes;    // Number of color planes: 1, 3, or 4short  BPL;          // The number of bytes of one color planeshort  Pal_t;char   Filler[58];} Header;

PCX 格式实际上不太适合保存照片图像,例如,同一幅320x240分辨率的“ Lenna”图像的16色格式大小为35 KB,256色格式大小为100 KB。


GIF GIF 于1987年发布,与 PCX 相比,它要先进得多。


GIF 使用的是Lempel-Ziv-Welch (LZW)算法,这种算法效率更高ーー同样的320x240图像以 GIF 格式保存,只有37 KB大小,而PCX是100 KB 大小。


1989年,GIF的扩展版本发布了,它也可以显示动画。令人惊讶的是,即使在今天,动画GIF仍然在使用,甚至在本文中也可以看到这个例子ーー它仍然是最简单的、跨平台的方法,可以将动画内容嵌入到页面中。


最后,于1992年推出了联合摄影专家组制作的JPEG格式。它使用的是有损数据压缩图片,是专门为保存照片而设计的。


该算法使用 DCT (离散余弦变换)来保存数据,这个方法本身是在1972年提出的,但是正如我们所看到的,仅仅20年之后,公众对这项技术的真正需求出现了。


顺便说一下,在90年代,色情图片的销售变成了一种生意。从技术角度来看,这些广告来自1994年的《电脑杂志》 ,很有趣:



总结


让我们回到最初的问题,在将近40年前的80年代初,有没有可能在XT机器上看《花花公子》?


从技术上讲,答案是肯定的。这些机器能够显示图像,并且有软盘驱动器,这使得文件共享变得容易。下面是1983年制造的一台真正的康柏便携式计算机的运行过程:


 

正如我们所看到的,它并没有那么快,图像加载时间大约是40秒,但它仍然可以工作。


但实际上,这台电脑是在1983年发布的,而 PCX、 GIF 或 JPEG 图像格式甚至还没有推出。


相关报道:

https://blog.devgenius.io/nude-pictures-on-early-retro-pcs-was-it-possible-3434b5c0447e


-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

浏览 25
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报