📜  Node.js GM orderedDither()函数(1)

📅  最后修改于: 2023-12-03 14:44:38.947000             🧑  作者: Mango

Node.js GM orderedDither()函数介绍

概述

Node.js GM(GraphicsMagick for Node.js)是一个基于GraphicsMagick库封装的Node.js图形处理模块。其中,orderedDither()函数是该模块中一个用于执行有序抖动(Ordered Dithering)的函数。

有序抖动是一种图像处理方法,通常用于将高于目标展示设备色深的图片缩减为目标色深。通过改变像素点的颜色值和亮度,有序抖动能够实现从高色深向低色深的有效转换,同时可以保留原图的细节和质感。

orderedDither()函数参数

该函数的参数包括:

  • thresholdMap: 一个2D整数数组,用于指定阈值矩阵。该矩阵通常是根据不同的抖动算法预先计算好的,thresholdMap的行数和列数即是抖动阈值的大小。
  • colors: 整数,用于指定图片的最大颜色数。
  • channel: 字符串,可选值包括red、green、blue、grey等,用于指定抖动的操作通道。
  • normalize: 布尔值,表示是否需要对阈值矩阵进行归一化。

该函数的返回值是一个GM对象,表示经过有序抖动处理的图片对象。

相关抖动算法

在实际应用中,通常需要选择不同的抖动算法来适应不同的输入图片和输出设备。以下是几种常见的抖动算法:

  • 四叉树抖动(Ordered Dithering via Thresholded Four-Directional Error Diffusion)
  • Floyd-Steinberg抖动(Floyd-Steinberg Dithering)
  • Jarvis抖动(Jarvis, Judice, and Ninke Dithering)
  • Sierra抖动(Sierra Dithering)
  • Burkes抖动(Burkes Dithering)
  • Stucki抖动(Stucki Dithering)
  • 等等。

不同的抖动算法通常会产生不同的视觉效果,程序员需要对具体业务场景进行选型和调试。

使用示例

以下是一个使用该函数的示例代码:

const gm = require('gm');

const inputImg = 'input.png';
const outputImg = 'output.png';

const thresholdMap = [
    [15, 135, 45, 165],
    [195, 75, 225, 105],
    [60, 180, 30, 150],
    [240, 120, 210, 90]
];

gm(inputImg)
    .orderedDither(thresholdMap, 16, 'red', true)
    .write(outputImg, (err) => {
        if (err) {
            console.log(err);
        } else {
            console.log(`图片处理成功!输出路径: ${outputImg}`);
        }
    });

本示例中,我们选用了一个4x4的抖动阈值矩阵,并且输出图像的色深被调整为16色。最终,程序将对输入图片进行操作,生成一张具有抖动效果的图片,并输出到指定路径。

总结

在对颜色深度要求较低的场景下,有序抖动是一种非常有效的图像处理方法。借助Node.js GM中的orderedDither()函数,程序员可以在Node.js平台上轻松的实现有序抖动操作,并获得所需的视觉效果。