Imagick::orderedPosterizeImage

(PECL imagick 2 >= 2.2.2, PECL imagick 3)

Imagick::orderedPosterizeImage执行有序抖动

警告

从 Imagick 3.4.4 开始,此函数已弃用。强烈建议不要依赖此函数。

描述

public Imagick::orderedPosterizeImage(string $threshold_map, int $channel = Imagick::CHANNEL_DEFAULT): bool

根据多个预定义抖动阈值图执行有序抖动,但根据输入参数,在多个强度级别上执行,这些级别对于不同的通道可能不同。如果 Imagick 已针对 ImageMagick 版本 6.3.1 或更高版本进行编译,则可以使用此方法。

参数

threshold_map

包含要使用的阈值抖动图名称的字符串

channel

提供对你的通道模式有效的任何通道常量。要应用于多个通道,请使用按位运算符组合 channeltype 常量。请参阅此 通道常量列表

返回值

成功时返回 true

错误/异常

错误时抛出 ImagickException。

示例

示例 #1 Imagick::orderedPosterizeImage()

<?php
function orderedPosterizeImage($imagePath, $orderedPosterizeType) {
$imagick = new \Imagick(realpath($imagePath));


$imagick->orderedPosterizeImage($orderedPosterizeType);
$imagick->setImageFormat('png');

header("Content-Type: image/png");
echo
$imagick->getImageBlob();
}

//orderedPosterizeImage($imagePath, 'o4x4,3,3');
//orderedPosterizeImage($imagePath, 'o8x8,6,6');
orderedPosterizeImage($imagePath, 'h8x8a');





?>

添加注释

用户贡献的注释 1 个注释

0
holdoffhunger at gmail dot com
12 年前
最初,我认为此函数类似于 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);

?>
To Top