# 电子图片

# 图片属性

# 分辨率

  • 分辨率通常写作 水平像素数×垂直像素数 的格式,比如 1080×720 ,表示图片的长、宽分别是多少个像素点。
  • 也可以用 DPI(Dots Per Inch)、PPI(Pixels Per Inch)表示,即每英寸内有多少个像素点。
  • 图片的分辨率越高,就能显示更多像素点,即更多内容、更多细节。

# 位深度

  • 位深度指图片中的每个像素点用几个二进制位表示。这些二进制位有多少种取值,就能存储多少种颜色。
  • 位深度可以取值为 1、4、8、16、24、32 。例如:
    • 位深度为 1 bit 时,只能存储黑白 2 种颜色。
    • 位深度为 8 bit 时,可以存储 256 种颜色。
    • 位深度为 24 bit 时,可以存储 2563 种颜色。
  • 图片的位深度越大,就能显示更多种颜色。

# 颜色模式

  • 黑白图
    • 位深度为 1 bit 。每个像素点的取值为 0~1 。
  • 灰度图
    • 位深度为 8 bit 。每个像素点的取值为 0~256 ,对应黑色、白色、中间的 254 种灰色。
    • 只有一个灰度通道。
    • 灰度图转换成黑白图时,通常选择 128 作为阙值,如果一个像素点的灰度值大于等于阙值,则记作 1(即白色),否则计 0(即黑色)。
  • 索引颜色
    • 位深度为 8 bit 。
    • 原理:将图中的颜色数减少到 256 种以内,把它们记在一个调色板上,然后记录图中的每个像素点采用编号 0~256 中的哪种颜色。
    • 优点:位深度为 8 bit ,因此图片体积较小。
    • 缺点:最多只能显示 256 种颜色。
  • RGB
    • 位深度为 24 bit ,又称为真彩色。
    • 有 RGB 三个通道,每个通道占 8 bit 。
  • RBGA
    • 位深度为 32 bit 。
    • 比 RGB 模式多了一个描述透明度的 Alpha 通道。
  • CMYK
    • 位深度为 32 bit ,有 CMYK 四个通道。
    • 印刷图片时通常转换成 CMYK 模式,减少印刷前后的色差。
      • 因为 CMYK 印刷品是通过反光来显示的,而 RGB 图片是通过主动发光来显示的,两者存在不可避免的色差。

# 图片体积

  • 指图片占用的磁盘空间。
  • 例如一张分辨率为 1080×720 、位深度为 24 bit 的图片,其理论体积为:1080×720×24 bit ≈ 2.2 MB 。实际体积可能偏小,因为通常会采用压缩算法。
  • 图片的分辨率越高、位深度越大,显示效果越好,越接近人眼看到的炫彩世界。但是这样图片的体积越大,占用更多磁盘空间。
  • 如果一张图片的体积很大,比如 10GB ,即使有足够的磁盘空间容纳它,但可能没有足够的内存空间读取它,导致不能显示。

# 压缩方式

  • 不压缩:不压缩图片的体积,直接保存原图。
  • 无损压缩:可以压缩图片的体积,且压缩时没有损失图片的任何质量。
  • 有损压缩:可以压缩图片的体积,但压缩时降低了图片的质量。压缩率越高,画质越差。

# 图片格式

# JPG/JPEG

  • 位深度最高为 24 bit 。
  • 采用 RGB 颜色模式,不支持透明显示。
  • 支持有损压缩,压缩率高。因此图片体积较小。 原理是通过舍弃一些不影响人眼观看的细节,来压缩体积。
  • 保存方式有两种:
    • Baseline :按行保存,显示时从上向下逐行显示。
    • Progressive :按深度保存,显示时从模糊逐渐变清晰。

# PNG

  • 位深度最高为 32 bit 。
  • 采用 RGBA 颜色模式,支持透明显示、控制透明度。
  • 支持无损压缩,但压缩率低。因此图片体积大。

# GIF

  • 位深度最高为 8 bit 。画质差,颜色简单。
  • 支持透明显示,但不能控制透明度,要么完全透明要么不透明。
  • 支持无损压缩,压缩率高。因此图片体积很小。
  • 不仅可以存储单张图片,还支持用多帧组成动画。

# BMP

  • 位深度最高为 32 bit 。
  • 不支持透明显示。
  • 不支持压缩,因此图片体积很大。
  • 主要用于 Windows 系统上,不适合网络传输。

# RAW

  • 常用于专业相机生成的图片,存储了原始的图片信息。

# SVG

  • :可缩放的矢量图形(Scalable Vector Graphics),又称为向量图
  • 原理是以 XML 格式存储一些描述图像形状的矢量函数,显示时需要通过数学运算确定图像形状。因此图片体积很小,可以无限放大而不失真。
  • 缺点是显示时要进行实时运算,占用 CPU 。

# 图片元数据

  • 元数据(Metadata):用于描述数据的数据。比如文件的长度、格式、创建时间等信息都属于文件的元数据。
  • 图片元数据:一些用于描述图片的键值对信息,以纯文本格式存储在图片中。
  • 常见的几种图片元数据标准:
    • IPTC :1990 年由国际新闻电信理事会(IPTC)发布,主要用于新闻业,记录标题、版权信息、摄影师名称等信息。
    • EXIF :1996 年由日本电子工业发展协会发布,主要用于数码相机生成的照片,记录相机型号、产商、光圈值等信息。
    • XMP :2001 年由 Adobe 公司发布,保存在图像头部的 XML 段中,可用于 JPEG、PNG、GIF、MP3、MPEG4、AVI 等格式的文件。
  • 处理图片元数据的一些工具:
    • Exiv2 (opens new window)
      • 采用 C++ 语言开发,提供了代码库和命令行工具。
        • 主要用于读写 IPTC、EXIF、XMP 类型的元数据。
    • ExifTool (opens new window)
      • 采用 Perl 语言开发,提供了代码库和命令行工具。
      • 支持的图片元数据类型比 Exiv2 更多,且支持以 -v 模式查看图片的数据结构。