最初,我认为此函数类似于 Posterize 函数,或者至少类似于 Imagick 类中的任何一个产生艺术效果的函数(例如 oilPaintImage 函数)。此函数可用于这些目的,但主要面向印刷生产。OrderedPosterize 只是一个高度灵活的抖动工具。其本质是为了通过在介质上使用大小根据图像细节变化的恒定点来生成高分辨率图像。每个人都曾在报纸上看到过抖动的照片,但维基百科页面提供了更好的示例:http://en.wikipedia.org/wiki/Dither。
对于只想使用此函数而不必过多关注 Imagick 类的人来说,这两个参数很不寻常。
第一个参数:threshold_map 是一组由一个非常简单的 xml 文件预定义的“画笔”。它们是:threshold、checks、o2x2、o3x3、o4x4、o8x8、h4x4a、h6x6a、h8x8a、h4x4o、h6x6o、h8x8o、h16x16o、c5x5b、c5x5w、c6x6b、c6x6w、c7x7b 和 c7x7w。这些是预期输入为 Thershold_Map 值的参数值。关于这些画笔形状的更详细描述可以在 Imagick 网站上找到:https://imagemagick.org.cn/Usage/quantize/tmaps_list.txt。
第二个参数:channel 是 Imagick 类中预定义的任何常量。在代码中,该值看起来像 "imagick::CHANNEL_RED",但你还有 "_value" 选项:red、undefined、gray、cyan、green、magenta、blue、yellow、alpha、opacity、matte、black、index、all 和 default。更多信息请访问:https://php.net/manual/en/imagick.constants.php#imagick.constants.channel。
最后,别忘了你可以对第二个参数使用按位运算符。这意味着你可以使用 & 对它们进行 AND 运算,使用 | 对它们进行 OR 运算,使用 & 对它们进行 XOR 运算,以及使用 ~ 对它们进行 NEGATE 运算。第二个参数的有效参数将是: "((~imagick::CHANNEL_GREEN) ^ imagick::CHANNEL_YELLOW) | imagick::CHANNEL_MAGENTA)"。你可以在这个特定参数中变得非常有创意。如果你想使用简单的 XML 定义自己的画笔,那么第一个参数也是如此。
注意:你可以将此函数用于艺术创作。怎么做?使用 orderedPosterizeImage 为图像添加一些纹理(例如,花瓶的照片),然后使用你的 OilPoint、Sketch 或 Standard Posterize 为图像添加酷炫的效果。但是,单独使用似乎很无聊。
现在,一个非常简单的演示
<?php
// 作者:[email protected]
// 文件名
// ---------------------------------------------
$file_to_grab_with_location = "graphics_engine/image_workshop_directory/ordered_posterize_source.bmp"
$imagick_type = new Imagick();
// 打开文件
// ---------------------------------------------
$file_handle_for_viewing_image_file = fopen($file_to_grab_with_location, 'a+');
$imagick_type->readImageFile($file_handle_for_viewing_image_file);
// 执行函数
// ---------------------------------------------
$imagick_type->orderedPosterizeImage("o2x2", imagick::CHANNEL_GREEN);
// 保存文件
// ---------------------------------------------
$file_to_save_with_location = "graphics_engine/image_workshop_directory/ordered_posterize_result.bmp"
$file_handle_for_saving_image_file = fopen($file_to_save_with_location, 'a+');
$imagick_type->writeImageFile($file_handle_for_saving_image_file);
?>