# 27 了解最常用的图像文件格式

> 原文： [https://serialmentor.com/dataviz/image-file-formats.html](https://serialmentor.com/dataviz/image-file-formats.html)

任何为数据可视化制作数字的人最终都必须知道有关数字如何存储在计算机上的一些信息。有许多不同的图像文件格式，每种格式都有其自身的优点和缺点。选择正确的文件格式和正确的工作流程可以缓解许多数字准备问题。

我自己的偏好是将 pdf 用于高质量的出版就绪文件，并且通常尽可能使用 png 用于在线文档和需要位图图形的其他场景，如果 png 文件太大，则将 jpeg 作为最后的手段。在下文中，我将解释这些文件格式之间的主要区别以及它们各自的优缺点。

## 27.1 位图和矢量图形

各种图形格式之间最重要的区别在于它们是位图还是矢量（表 27.1 ）。位图或光栅图形将图像存储为各个点（称为像素）的网格，每个点都具有指定的颜色。相比之下，矢量图形存储图像中各个图形元素的几何排列。因此，矢量图像包含诸如“从左上角到右下角的黑线，以及从左下角到右上角的红线”的信息，并且实时图像在运行中重新创建。因为它显示在屏幕上或打印出来。

<caption>Table 27.1: Commonly used image file formats</caption>
| 缩写 | 名称 | 类型 | 应用 |
| :-- | :-- | :-- | :-- |
| PDF 格式 | 可移植文档格式 | 向量 | 一般用途 |
| EPS | 封装的 PostScript | vector | 一般用途，过时;使用 pdf |
| SVG | 可缩放矢量图形 | vector | 在线使用 |
| PNG | 便携式网络图形 | 位图 | 针对线条图进行了优化 |
| JPEG | 联合图像专家组 | bitmap | 针对摄影图像进行了优化 |
| 斗嘴 | 标记图像文件格式 | bitmap | 印刷制作，准确的色彩再现 |
| 生的 | 原始图像文件 | bitmap | 数码摄影，需要后期处理 |
| GIF | 图形交换格式 | bitmap | 过时的静态数字，好的动画 |

矢量图形也称为“与分辨率无关”，因为它们可以放大到任意大小而不会丢失细节或清晰度。有关演示，请参见图 27.1 。

![](img/ef81c80cbf4b8f78706d4d925d7a3a24.jpg)

图 27.1：矢量图形和位图之间关键区别的图示。 （a）原始图像。黑色方块表示我们在（b）和（c）部分放大的区域。 （b）当图像被存储为位图图形时，从部分（a）增加高亮区域的放大率。随着我们进一步放大，我们可以看到图像如何变得越来越像素化。 （c）增加图像矢量表示的放大率。图像在任意放大倍率下保持完美清晰度。

矢量图形有两个缺点，可能并且经常会在实际应用程序中造成麻烦。首先，因为矢量图形是由显示它们的图形程序在运行中重新绘制的，所以可能发生在两个不同程序或两台不同计算机上相同图形的外观差异。文本最常出现此问题，例如，当所需字体不可用且呈现软件替换不同字体时。字体替换通常允许观看者按预期阅读文本，但是得到的图像很少看起来很好。有一些方法可以避免这些问题，例如在 pdf 文件中概述或嵌入所有字体，但它们可能需要特殊的软件和/或特殊技术知识才能实现。相比之下，位图图像看起来总是一样的。

其次，对于非常大和/或复杂的数字，矢量图形可能会增长到巨大的文件大小并且渲染速度很慢。例如，数百万个数据点的散点图将包含每个单独点的 x 和 y 坐标，并且在渲染图像时需要绘制每个点，即使点重叠和/或被其他图形元素隐藏。因此，文件的大小可能是几兆字节，并且渲染软件可能花费一些时间来显示该图形。当我在 21 世纪初期担任博士后时，我曾经创建了一个 pdf 文件，当时花了将近一个小时才能在 Acrobat 阅读器中显示。虽然现代计算机速度更快，渲染时间几分钟几乎都是闻所未闻的，但即使是几秒钟的渲染时间也可能会造成破坏，如果你想将你的数字嵌入到更大的文档中并且你的 pdf 阅读器停止运行每次你用一个有问题的数字显示页面。当然，另一方面，只有少量元素（一些数据点和一些文本，比如说）的简单数字通常会比矢量图形小得多，而且观看软件甚至可以更快地渲染这些数字比相应的位图图像。

## 27.2 位图图形的无损和有损压缩

大多数位图文件格式采用某种形式的数据压缩来保持文件大小的可管理性。压缩有两种基本类型：无损和有损。无损压缩可确保压缩图像与原始图像的像素与像素相同，而有损压缩则接受一些图像质量下降，以换取较小的文件大小。

要了解何时使用无损或有损压缩是合适的，有必要对这些不同的压缩算法如何工作有基本的了解。我们首先考虑无损压缩。想象一下具有黑色背景的图像，其中图像的大部分区域是纯黑色，因此许多黑色像素紧挨着彼此出现。每个黑色像素可以由一行中的三个零表示：0 0 0，表示图像的红色，绿色和蓝色通道中的零强度。图像中的黑色背景区域对应于图像文件中的数千个零。现在假设图像中的某个位置是 1000 个连续的黑色像素，对应于 3000 个零。我们可以简单地存储我们需要的零个数，而不是写出所有这些零。通过写入 3000 0.通过这种方式，我们只用两个数字传递完全相同的信息，即计数（此处为 3000）和值（此处为 0）。多年来，已经开发了许多这些系列的巧妙技巧，现代无损图像格式（例如 png）可以以惊人的效率存储位图数据。然而，当图像具有大面积均匀颜色时，所有无损压缩算法都表现最佳，因此表 27.1 列出了针对线条图优化的 png。

摄影图像很少有相同颜色和亮度的多个像素彼此相邻。相反，他们在许多不同的尺度上都有渐变和其他有规律的图案。因此，这些图像的无损压缩通常不能工作得很好，并且已经开发出有损压缩作为替代方案。有损压缩的关键思想是图像中的某些细节对于人眼来说太微妙，并且可以丢弃那些细节而不会明显降低图像质量。例如，考虑 1000 像素的渐变，每个像素的颜色值略有不同。如果仅使用 200 种不同颜色绘制渐变并且每五个相邻像素以完全相同的颜色着色，则渐变看起来几乎相同。

最广泛使用的有损图像格式是 jpeg（表 27.1 ），实际上许多数码相机默认输出图像为 jpeg。 Jpeg 压缩对于摄影图像非常有效，并且通常可以在图像质量几乎没有降低的情况下获得文件大小的大幅减少。但是，当图像包含锐边（例如由线条图或文本创建）时，jpeg 压缩会失败。在这些情况下，jpeg 压缩会导致非常明显的伪像（图 27.2 ）。

![](img/b398dd1a19eff5512452c8fe42f1dcb1.jpg)

图 27.2：jpeg 工件的图示。 （a）使用日益严格的 jpeg 压缩多次再现相同的图像。生成的文件大小在每个图像上方以红色文本显示。文件大小减少了 10 倍，从原始图像中的 432KB 减少到压缩图像中的 43KB，导致图像质量的轻微降低。但是，文件大小进一步减少 2 倍，仅为 25KB，会导致大量可见的伪像。 （b）放大到最高度压缩的图像会显示各种压缩伪像。照片来源：Claus O. Wilke

即使 jpeg 文物非常微妙以至于它们不能立即被肉眼看到，它们也会引起麻烦，例如在印刷生产中。因此，尽可能避免使用 jpeg 格式是个好主意。特别是，对于包含线条图或文本的图像，您应该避免使用它，就像数据可视化或屏幕截图一样。这些图像的适当格式是 png 或 tiff。我将 jpeg 格式专门用于摄影图像。如果图像包含摄影元素和线条图或文本，您仍应使用 png 或 tiff。这些文件格式的最坏情况是你的图像文件变大，而 jpeg 的最坏情况是你的最终产品看起来很难看。

## 27.3 在图像格式之间转换

通常可以将任何图像格式转换为任何其他图像格式。例如，在 Mac 上，您可以使用“预览”打开图像，然后导出为多种不同的格式。但是，在这个过程中，重要信息可能会丢失，信息永远不会重新获得。例如，在将矢量图形保存为位图格式之后，例如，作为 jpeg 的 pdf 文件，作为矢量图形的关键特征的分辨率独立性已经丢失。相反，将 jpeg 图像保存为 pdf 文件并不会将图像神奇地转换为矢量图形。图像仍然是位图图像，只存储在 pdf 文件中。同样，将 jpeg 文件转换为 png 文件不会删除 jpeg 压缩算法可能引入的任何工件。

因此，始终以保持最大分辨率，准确性和灵活性的格式存储原始图像是一个很好的经验法则。因此，对于数据可视化，要么将图形创建为 pdf，然后在必要时转换为 png 或 jpg，要么存储为高分辨率 png。同样，对于仅作为位图可用的图像（如数码照片），将其存储为不使用有损压缩的格式，或者如果无法完成，则尽可能少地压缩。此外，以尽可能高的分辨率存储图像，并在需要时缩小图像。