PHP Conference Japan 2024

Imagick::orderedPosterizeImage

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

Imagick::orderedPosterizeImage执行有序抖动

警告

此函数自 Imagick 3.4.4 起已弃用。强烈建议不要依赖此函数。

描述

public Imagick::orderedPosterizeImage(字符串 $threshold_map, 整数 $channel = Imagick::CHANNEL_DEFAULT): 布尔值

根据一些预定义的抖动阈值映射执行有序抖动,但在多个强度级别上执行,根据输入参数,不同通道的强度级别可以不同。如果 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 条注释

holdoffhunger at gmail dot com
12 年前
最初,我以为此函数类似于 Posterize 函数,或者至少是 Imagick 类中任何一个产生艺术效果的函数(如 oilPaintImage 函数)。此函数可用于这些目的,但它主要面向印刷生产。有序色调化只是一个高度灵活的抖动工具。其目的本质上是通过在介质上使用大小根据图像细节变化的恒定点来生成高分辨率图像。每个人都曾在报纸上见过抖动的照片,但维基页面提供了更好的示例: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 运算,以及 ~ 对它们进行 NOT 运算。第二个参数的有效参数将是:“((~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