用40年前的電腦打開《花花公子》封面女郎圖片,這可能嗎?

大數(shù)據(jù)文摘出品
搞過圖像處理的同學(xué)應(yīng)該都認(rèn)識(shí)這位吧?

這位名叫Lena Forsen的模特,自從在上世紀(jì)70年代被南加州大學(xué)信號(hào)與圖像處理研究所的助理教授Alexander Sawchuk用作測(cè)試圖片后,就一發(fā)不可收拾,成為圖像行業(yè)標(biāo)準(zhǔn),被學(xué)者們復(fù)制和重新分析了數(shù)十億次。
可以說,她是整個(gè)計(jì)算機(jī)圖像處理領(lǐng)域的“女神”。
Medium上一位博主突然產(chǎn)生了一個(gè)想法,在那些幾十年前古老的計(jì)算機(jī)上,能夠顯示“女神”Lena Forsen的這張經(jīng)典照片嗎?
最古老的可以顯示照片的計(jì)算機(jī),又是哪一款呢?
好像還有點(diǎn)意思,我們一起來看看。
遠(yuǎn)在圖像產(chǎn)生之前
我們現(xiàn)在熟悉的圖像格式其實(shí)離我們并不遠(yuǎn)。JPEG 圖像格式于1993年推出,GIF于1987年發(fā)布。
那遠(yuǎn)在這些圖像格式誕生之前,有沒有可能顯示圖像呢?
70年代的大型機(jī)和超級(jí)計(jì)算機(jī)確實(shí)能夠處理照片圖像,但那離普通人太遠(yuǎn)了。
第一臺(tái)個(gè)人電腦 Altair 8800于1975年發(fā)布,用戶可以通過開關(guān)進(jìn)入程序,并通過Led燈觀看結(jié)果:

顯然這玩意是不能顯示圖像的。
在70年代末,搭載CP/M OS的計(jì)算機(jī)出現(xiàn)了,這是一個(gè)完全成熟的操作系統(tǒng),有文件系統(tǒng)、磁盤驅(qū)動(dòng)器、編譯器、程序和游戲。但是有一個(gè)問題—— CP/M UI只是文本。
從理論上講,我們可以用 ASCII 圖形來顯示下面的內(nèi)容:

但是這顯然是一種作弊的手法,不能算數(shù)。
再往后來呢?
一些CP/M OS機(jī)器,比如Visual 1050計(jì)算機(jī),是有圖形功能的,但是沒有通用的標(biāo)準(zhǔn)。

最早可用于CP/M的格式之一是RLE,它對(duì)黑白圖像進(jìn)行編碼,分辨率為256×192。
我們終于能看到“女神”了!
雖然實(shí)際上圖片可能看起來像這樣:

正如我們所看到的,它遠(yuǎn)非完美,但仍然比純ASCII好得多。這種格式的單色圖像大小約為6 KB,因此在CP/M 90 KB軟盤上,最多可以保存14張這種質(zhì)量的照片。
后來計(jì)算機(jī)硬件變得更加強(qiáng)大。
1981年,CGA(彩色圖形適配器)被引入,MS-DOS計(jì)算機(jī)能夠顯示4種顏色的高達(dá)320x240分辨率的圖形。
這種品質(zhì)的圖片可能看起來像這樣:

這種格式的圖像大小約為40 KB,因此在一張360 KB 的軟盤上可以放置大約8張圖像。幾年后,1987年推出的 VGA 適配器能夠顯示256張彩色圖像,這些圖像就更真實(shí)了。

這張圖片的大小是77kb,所以5-6張圖片可以保存在一張720kb的1.44英寸的磁盤上。
后來,80年代末推出的 SVGA (高級(jí)視頻圖形陣列)適配器能夠使用16M顏色顯示高達(dá)1280x1024分辨率的逼真圖像,這實(shí)際上與我們今天所用的顏色非常接近了。
其他的計(jì)算機(jī)模型在80年代和90年代也可以使用(蘋果,Commodore,ZX Spectrum等等),它們都可以顯示不同類型的圖形。
先有圖像還是先有圖像格式?
先有雞還是先有蛋?先有圖像還是圖像格式?
肯定是圖像。
在最簡(jiǎn)單的情況下,“格式”是不需要的,單色圖像只是一個(gè)位序列:

因此,如果我們知道圖像的寬度和高度,并且計(jì)算機(jī)具有圖形功能,那么每個(gè)開發(fā)人員都可以制作一個(gè)程序,從二進(jìn)制文件中顯示圖像“原樣”。
順便說一下,在談?wù)摗白远x”圖像格式時(shí),提到1985年發(fā)布的游戲“脫衣?lián)淇恕?Strip Poker)也很有意思:
? ? ? ? ? ? ? ?
? ? ? ?
我們可以看到,在第一個(gè)屏幕,玩家可以選擇兩個(gè)人物之一,“蘇姿”或“梅麗莎”,第二個(gè)屏幕是游戲本身。如果我們打開游戲文件夾,很容易看到這兩個(gè)人物的數(shù)據(jù)文件只是保存“原樣”,根本沒有壓縮,所有文件大小相同:
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
游戲開發(fā)者盡最大努力縮小尺寸:每個(gè)文件的大小只有5768字節(jié)!
這樣我們只能得到320x18的灰度圖像。事實(shí)上,我們可以使用 Python 打開 pic-file,看到許多細(xì)節(jié)缺失:

也許游戲使用了單獨(dú)的背景圖片或者通過編程方式繪制了一些細(xì)節(jié)(比如垂直線) ,開發(fā)人員肯定使用了一些技巧來有效地在320x240的屏幕上顯示320x18的圖片。
他們?yōu)槭裁匆ㄟ@么多精力呢?
答案很簡(jiǎn)單ーー當(dāng)時(shí)許多計(jì)算機(jī)根本沒有硬盤驅(qū)動(dòng)器,因此在軟盤上寫入游戲的能力至關(guān)重要。
正如我們已經(jīng)知道的那樣,第一張軟盤的大小只有360 KB——這不僅對(duì)于游戲而言已經(jīng)足夠了,對(duì)于 MS-DOS 引導(dǎo)文件也是如此。開發(fā)者實(shí)際上做到了,游戲的大小只有140 KB。
當(dāng)然,“按原樣”保存圖像可能會(huì)占用空間,開發(fā)人員試圖找到更好的方法來保存數(shù)據(jù)。
最早的圖像編碼方法之一是RLE (游程編碼)。在這種格式下,每個(gè)數(shù)據(jù)塊都存儲(chǔ)在‘count,value’對(duì)中,這樣可以更有效地保存圖像。
作為一個(gè)簡(jiǎn)化的例子,黑白點(diǎn)序列“ bwwbwwwwww”可以保存為“1B3W1B4W”。正如我們所看到的,它更加緊湊,可以用于圖形或表格,但是對(duì)于真實(shí)感圖像,“壓縮”的圖像甚至可以比原始圖像更大。
最早被廣泛使用的格式之一是 PCX (PiCture eXchange) ,它于1985年推出。這種格式也使用 RLE 編碼,正如我們看到的,頭部字段存儲(chǔ)了大量附加信息:
// 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 格式實(shí)際上不太適合保存照片圖像,例如,同一幅320x240分辨率的“ Lenna”圖像的16色格式大小為35 KB,256色格式大小為100 KB。
GIF GIF 于1987年發(fā)布,與 PCX 相比,它要先進(jìn)得多。
GIF 使用的是Lempel-Ziv-Welch (LZW)算法,這種算法效率更高ーー同樣的320x240圖像以 GIF 格式保存,只有37 KB大小,而PCX是100 KB 大小。
1989年,GIF的擴(kuò)展版本發(fā)布了,它也可以顯示動(dòng)畫。令人驚訝的是,即使在今天,動(dòng)畫GIF仍然在使用,甚至在本文中也可以看到這個(gè)例子ーー它仍然是最簡(jiǎn)單的、跨平臺(tái)的方法,可以將動(dòng)畫內(nèi)容嵌入到頁面中。
最后,于1992年推出了聯(lián)合攝影專家組制作的JPEG格式。它使用的是有損數(shù)據(jù)壓縮圖片,是專門為保存照片而設(shè)計(jì)的。
該算法使用 DCT (離散余弦變換)來保存數(shù)據(jù),這個(gè)方法本身是在1972年提出的,但是正如我們所看到的,僅僅20年之后,公眾對(duì)這項(xiàng)技術(shù)的真正需求出現(xiàn)了。
順便說一下,在90年代,色情圖片的銷售變成了一種生意。從技術(shù)角度來看,這些廣告來自1994年的《電腦雜志》 ,很有趣:

總結(jié)
讓我們回到最初的問題,在將近40年前的80年代初,有沒有可能在XT機(jī)器上看《花花公子》?
從技術(shù)上講,答案是肯定的。這些機(jī)器能夠顯示圖像,并且有軟盤驅(qū)動(dòng)器,這使得文件共享變得容易。下面是1983年制造的一臺(tái)真正的康柏便攜式計(jì)算機(jī)的運(yùn)行過程:

?
正如我們所看到的,它并沒有那么快,圖像加載時(shí)間大約是40秒,但它仍然可以工作。
但實(shí)際上,這臺(tái)電腦是在1983年發(fā)布的,而 PCX、 GIF 或 JPEG 圖像格式甚至還沒有推出。
相關(guān)報(bào)道:
https://blog.devgenius.io/nude-pictures-on-early-retro-pcs-was-it-possible-3434b5c0447e

