📜  PHP |想象一下 getQuantumDepth()函数(1)

📅  最后修改于: 2023-12-03 15:33:35.927000             🧑  作者: Mango

PHP | 想象一下 getQuantumDepth() 函数

在 ImageMagick 库中,getQuantumDepth() 函数返回图像的量化深度 (quantum depth)。 它是指颜色能够表现的最大位数,在 ImageMagick 中,通常为 8bits,即 256 种颜色。但也可能会更多。

以下是可能的代码实现:

function getQuantumDepth(): int
{
    if (extension_loaded('imagick')) {
        $quantum = Imagick::getQuantumDepth();
        if ($quantum > 16) {
            return $quantum;
        }
    }
    return 8;
}

上述代码首先判断 imagick 扩展是否加载,如果是,则获取当前 imagick 所使用的量化深度。如果量化深度大于 16, 则返回该值,否则返回 8。

注:本文着重于 Imagick 的相关知识,不会过多讨论其他库或者其他方案实现 getQuantumDepth() 函数的方式。

Imagick 是什么

ImageMagick 是一个功能强大的图像处理库,可用于从命令行、脚本或在各种编程语言中调用它的 API 来处理图像。它支持超过 100 种格式的图片,包括 JPEG、PNG、GIF、SVG 等等,可以创建、编辑、转换及获取图片,支持多线程,是 Linux、Windows、macOS 等各种操作系统中最常用的图像处理库之一。

Imagick 是 ImageMagick 的 PHP 扩展,拥有与应用程序服务器端进行交互的能力。

量化深度是什么

量化深度是指一个图像每个通道 (如 R、G、B 等) 能够表现的颜色级别数量。例如,对于一个 8bits 的 RGB 图像来说,每个颜色通道最多只能表现 256 种不同的颜色。因此,整个图像最多只能显示 $256^3$ 种不同的颜色,即差不多是 1677 万种。

量化深度越高,每个通道可以表现的颜色级别越多,图像颜色的渐变会越加细致,就越逼真,但是由于颜色数目的减少,图像的大小要更大。

总之,量化深度是调整图像中颜色的最终数量的一件令人感到困惑的事情。

Imagick 中的量化深度

在 ImageMagick 中,量化深度有两个常用的值:8bits 和 16bits。Imagick 扩展也支持其他量化深度,比如 32bits 和 64bits,但这两个值通常不会使用。

8bits 的图片有 256 种颜色,是最常用的深度,对于很多情况,它足以表现出几乎每个人类眼睛都能区分的色彩。如果一个图像改成 8bits,它的大小会大大减少,因为它只需要原来的 $1/3$。

16bits 的片有 65,536 种颜色,会非常适合表现可能在 8bits 中出现渐变的图像,如渐变或斑点。这个深度通常被用于打印、出版业,需要颜色的精度更高。

在实际使用 ImageMagick 时,我们通常并不需要担心量化深度。ImageMagick 会尽可能自动优化颜色,将图片转化为更小的尺寸,只要不会导致严重损失质量。

结论

在 Imagick 扩展中,getQuantumDepth() 函数是获取当前图片的量化深度的主要方法。本文介绍了 Imagick 和量化深度的基本知识,以及使用 Imagick 获取量化深度的方法和相应代码。