上一篇:2T架构师学习资料干货分享

大数据文摘出品

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

这位名叫 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) 也很有意思:

我们可以看到,在第一个屏幕,玩家可以选择两个人物之一,“苏姿”或“梅丽莎”,第二个屏幕是游戏本身。另外,搜索公众号互联网架构师后台回复“2T”,获取一份惊喜礼包。如果我们打开游戏文件夹,很容易看到这两个人物的数据文件只是保存“原样”,根本没有压缩,所有文件大小相同:

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 相比,它要先进得多。另外,搜索公众号互联网架构师后台回复“2T”,获取一份惊喜礼包。

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 图像格式甚至还没有推出。

感谢您的阅读,也欢迎您发表关于这篇文章的任何建议,关注我,技术不迷茫!小编到你上高速。

· END ·

最后,关注公众号互联网架构师,在后台回复:2T,可以获取我整理的 Java 系列面试题和答案,非常齐全。

正文结束

推荐阅读 ↓↓↓

1.救救大龄码农!45岁程序员在国务院网站求助总理!央媒网评来了...

2.如何才能成为优秀的架构师?

3.从零开始搭建创业公司后台技术栈

4.程序员一般可以从什么平台接私活?

5.37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6.IntelliJ IDEA 2019.3 首个最新访问版本发布,新特性抢先看

7.这封“领导痛批95后下属”的邮件,句句扎心!

8.15张图看懂瞎忙和高效的区别!

用40年前的电脑打开女神图片,这你敢信?相关推荐

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

  2. x³+y³+z³=3第三组整数解是多少,这个58年难题被40万台电脑算出来了

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 你在看到标题的时候,一定会想: 这个问题我知道答案:x.y.z都等于1. 如果再多算几步,你还能发现4.4.-5也是一组整数解. 注意审题 ...

  3. 模拟黑洞图像_人类史上第一张黑洞照片即将问世,但其实早在40年前就有人画出了它的样子...

    一百年前,爱因斯坦提出了相对论,改变了人类对物理世界的认识,带领我们审视了整个宇宙. 相对论是一个非常复杂的理论,以至于很多理论直到现在还没有被证实. 在相对论中,爱因斯坦"预言" ...

  4. 更换锁定计算机图片,电脑锁屏图片怎么设置

    电脑锁屏图片怎么设置 觉得电脑锁屏的图片单调没有新意?其实大家想知道电脑锁屏图片应该怎么设置吗?下面是小编推荐给大家的电脑锁屏图片怎么设置,希望大家有所收获. 同时按下窗口键win+R,调出运行对话框 ...

  5. 会计用计算机很快是,40个超实用电脑快捷键,老会计都在用!

    40个超实用电脑快捷键 Ctrl + A 全选 Ctrl + C 复制 Ctrl + F 查找 Ctrl + P 打印 Ctrl + X 剪切 Ctrl + V 粘贴 Ctrl + Z 撤消 Ctrl ...

  6. opencv打开的图片应用于nn.Conv2d()(二)

    接一部分 代码: import cv2 import torch from torch import nn img = cv2.imread("F:\\Pythontest\\cnn\\da ...

  7. opencv打开的图片应用于nn.Conv2d()(一)(H, W, C)转为 (C, H, W)

    在深度学习领域,使用opencv打开的图片格式是:(H, W, C),而pytorch中的卷积函数nn.Conv2d()使用的数据格式是:(T, C, H, W) T 代表的是迷你批次,即一次传入多少 ...

  8. 怎样把计算机里的图片快速删除,如何批量删除重复图片 电脑中相同图片批量删除的方法...

    因为工作需要,在电脑上存了大量的图片,有些是从网站上批量下载的,这里面难免会有许多重复的,如果数量少的话,一张张地看,再一张张的删除重复图片那还行得通.可是当你一个文件夹里就有几千上万张的图片时,再用 ...

  9. 国外大学计算机mac,美国大学教授发现一台30多年前苹果电脑 还能正常运行

    [TechWeb]2月21日消息,据国外媒体报道,从创立当年推出第一代苹果电脑开始,苹果电脑目前已存在了40多年,初代电脑特别是还能正常运行的苹果第一代电脑近几年在拍卖市场上都卖出了高价,近日美国纽约 ...

  10. 电脑怎么压缩图片大小,4个通用方法分享

    电脑怎么压缩图片大小?我相信这个问题很多小伙伴都遇到过的.我们压缩图片大小的主要原因是为了优化网站.应用程序或移动设备的性能.大尺寸的图片文件需要更多的存储空间和带宽,这将导致网页加载速度变慢,浪费用 ...

最新文章

  1. 图解LanHelper 使用
  2. RSA签名算法 - Java加密与安全
  3. B - Labyrinth Gym - 102798B
  4. Android笔记 定义意图过滤器intent- filter demo
  5. 距离矢量路由算法_计算机网络自学笔记:选路算法
  6. 企业级oracle视频教程,企业级Oracle数据库高可用性(OracleDataGuard)DBA培训视频全集...
  7. 《疯狂的站长》读后感2
  8. 如何使用adb连接Android设备?
  9. java.lang.UnsupportedOperationException: Required method instantiateItem was not overridden
  10. 亚马逊速卖通tro律所禁令冻结资金的解决方法
  11. Virtualbox win7虚拟机全屏显示
  12. mysql 1045 centos_解决centos下MySQL登录1045问题
  13. WindowsForm 入门
  14. 辗转相除法求最大公因数-C语言
  15. c语言编程p0端口使灯一亮一灭,【单片机学习】第六课:单片机控制第一个外设-LED灯...
  16. java和vue视频点播弹幕系统
  17. 代理加速 gradle 构建
  18. java抠图边框颜色处理_【图】绝密!抠图去黑边的方法 抠图去黑边框的处理技巧...
  19. 仿“香哈菜谱”微信小程序(第4章)
  20. 算法设计与分析-电子工业出版社

热门文章

  1. Xcode 真机运行报错Errors were encountered while preparing your device for development. Please check the De
  2. 如何将Mac外部驱动器映射到CrossOver容器
  3. 自动化瓦力多渠道打包python脚本
  4. Linux——常用命令
  5. Myeclipse.ini 配置
  6. React.js 组件的 props vs state
  7. Swift---TextView用法
  8. IOS中获取屏幕尺寸
  9. 思科认证CCNA专业英文词汇全集(4)
  10. 基于WinForm的多语言开发之界面加载