用40年前的电脑打开女神图片,太刺激!

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

来源丨大数据文摘

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

c3d6262fb59fc735f6ba13bcb2e799af.png

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

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

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

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

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

远在图像产生之前

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

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

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

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

faeb3c470f62b38eec553df7bc09d342.png

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

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

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

714101a106073383200059fa5b37783a.png

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

再往后来呢?

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

da08970c22f5f65d793f744030e63b1c.png

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

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

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

865046eccf06356ccf19767153f92c6b.png

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

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

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

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

4b492231ee10fcb7df2ac1a6a83bcdf1.png

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

e214a32b141aa0d92e724e87f71095f3.png

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

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

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

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

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

肯定是图像。

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

19e9469e74fa987bbf0d35ba31342e73.png

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

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

8f2016167dd490f63a59907b35231cf0.png

5f8fc353b5574e7973bb5da7a690f2fa.png

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

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

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

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

d329a3642c6128ba736de16148532154.png

也许游戏使用了单独的背景图片或者通过编程方式绘制了一些细节 (比如垂直线) ,开发人员肯定使用了一些技巧来有效地在 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 年的《电脑杂志》 ,很有趣:

3eeafc8e592583ce7b431d0ec33a5a00.png

总结

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

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

30c627b211a0908f370acb6c230ccdc5.png

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

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

-End-

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

5e07ee69f899f77469dc661d8b2b0db7.png

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

在看点这里2d8fab695af9e457b23e2fb428424406.gif好文分享给更多人↓↓

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一周年纪念版在增强版上增加一下主要功能: 01.微信支付充值积分、 02.礼物、 03.道具、 04.多域名随机,被封活动域名自动跳转到新活动域名(此功能在当前能完美解决微信封域名,活动域名随时可以换,不影响之前分享出去链接。未来微信有可能屏蔽此功能,目前可用) 05.生成短链接 06.投票滑块验证码(极验证) 功能介绍: 01.支持所有类型公众号都可以使用所有功能(非认证服务号需借用认证服务号权限),未认证个人号也可多开投票。 02.添加投票多地区限制 03.添加投票客服消息通知给选手。 04.自定义分组 05.自定义报名字段 06.自定义底部导航 07.七牛支持 08.语音支持 09.取消关注减票 10.其他。。。 11.单公众号可以创建多活动,单活动可以多公众号开展 12.GPS、短信、ip、粉丝资料地区验证限制(可多选一同开启) 13.选手海报 14.积分充值、购买礼物、道具 15.多域名随机跳转防封 特色功能: 01.界面配色后台自定义,轻松搭建不同风格; 02.100%防暴力高并发刷票(切换不同微信号投票可设置同一IP每天最多投票数,或人工后台封ip) 03.支持微信开放平台,订阅号如服务号操作,用户体验极佳 04.朋友圈人气榜,后台设置是否开启 05.首页列表全ajax异步加载,避免重复加载刷新整个页面 06.公众号回复可以报名和投票,未认证号一样做活动 07.可设置多倍投票,一票顶多票。不再怕活动三天热票数悬殊大 08.整合微擎积分系统,报名投票可获积分 09.积分抽奖系统(可抽个人双倍投票券) 10.活动多公众号支持(已经很成熟,稳定) 多公众号优势1: 同一个活动,可由多公众号同时进行,各号各吸各的粉,各投各的票,互补干扰。但奖品只需要一份!! 给赞助商账号也吸粉,大大提高合作成功几率,可以多拉赞助商一起办。说不定奖品钱不用自己出,赞助商都出了还有的赚,齐乐乐,让赞助商主动找您。减轻您的运营成本。 多公众号优势2: 公众号粉丝互换。因为粉丝可以多公众号投票,就需要关注其他公众号。可以把粉丝多的公众号粉丝引导给新公众号关注。(带小号刷粉丝) 多公众号优势3: 做活动10个公众号 算每个号100粉丝。 现在多开关联起来,让粉丝去关注其他平台关注投票。 就是1000粉。 除去交叉重复的也有900。 如果大号粉丝有10w粉。那么就可以迅速把大号10w粉转移到其他小号。等于粉丝快速转移分配到其他号 其他通用功能: 01.可设置报名是否需要审核 02.可设置活动参与地区 03.后台数据监控 04.可设置报名投票是否需要关注 05.一个公众号可同时开展多个活动 06.图片都经过系统压缩节省带宽 空间(可自行去下面demo上传图片测试,首页图都基本无损压缩在20kb左右) 07.后台可控是否只允许微信打开 08.后台可调整票数 09.用户可在微信网页自助更换照片 10.整个模块多方面优化,占用资源少。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值