Imagick::paintTransparentImage

(PECL imagick 2, PECL imagick 3)

Imagick::paintTransparentImage更改与填充定义的颜色匹配的任何像素

警告

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

描述

public Imagick::paintTransparentImage(混合 $target, float $alpha, float $fuzz): 布尔

更改与填充定义的颜色匹配的任何像素。

参数

target

将此目标颜色更改为图像中指定的透明度值。

alpha

透明度级别:1.0 为完全不透明,0.0 为完全透明。

fuzz

图像的模糊成员定义了将两种颜色视为相同时的容差程度。

返回值

成功时返回 true

错误/异常

在发生错误时抛出 ImagickException。

变更日志

版本 描述
PECL imagick 2.1.0 现在允许字符串表示的颜色作为第一个参数。以前的版本只允许 ImagickPixel 对象。

添加说明

用户贡献说明 3 个说明

匿名
15 年前
实际上,它似乎工作正常,只是可能不是按预期的方式。

查看 ImageMagick 网站上的模糊选项 (https://imagemagick.org.cn/script/command-line-options.php#fuzz),"距离可以是绝对强度单位,也可以通过附加 % 作为最大可能强度的百分比 (255、65535 或 4294967295)。"

由于它需要一个浮点数,因此百分比值将不起作用,因此它实际上是最大强度值之一。在我的情况下,我正在处理的图像似乎具有 65535 的最大强度值。因此,对于大约 10% 的模糊度为 6500 似乎有效。

然而,可能存在问题的是,您如何确定颜色/图像的最大强度?使用静态 6500 会很好,直到我必须转换最大强度值不为 65535 的图像。如果它是 255,它会擦除整个图像。或者,如果使用更大的值,模糊度会远远不足。
quickshiftin at gmail dot com
9 年前
查看 Stackoverflow 上的这个主题,以获取关于如何确定图像最大强度的答案。

http://stackoverflow.com/questions/26239130/determine-max-possible-intensity-of-image/26240656#26240656

简而言之,以下是使 $fuzz 参数的行为更符合预期的代码(它现在表示介于 0-100 之间的百分比)。$fuzz 值现在应该是一个介于 0 和 1 之间的浮点数。

class SaneImagick extends Imagick
{
public function paintTransparentImage($target, $alpha, $fuzz)
{
$iQuantumDepth = pow(2, $this->getQuantumDepth()['quantumDepthLong']);
return parent::paintTransparentImage($target, $alpha, $fuzz * $iQuantumDepth);
}
}
alain at ocarina dot fr
12 年前
模糊度在 0 到 65535 的范围内工作良好。

我建议您尝试在色谱图像上移动模糊度。

1/ 获取色谱图(Google Image 有很多)

2/ 尝试以下代码

<?php

function fuzzTest($source, $target, $fuzz) {

// 加载图像
$im = new Imagick($source);

// 调整图像大小以使其易于比较
$im->resizeImage(320, 240, Imagick::FILTER_LANCZOS, 1, true);

// 应用模糊度
$im->paintTransparentImage($im->getImagePixelColor(0, 0), 0, $fuzz);

// 写入图像
$im->setImageFormat('png');
$im->writeImage($target);
$im->destroy();

return
true;
}

for (
$i = 0; ($i <= 10); $i++) {
fuzzTest('spectrum.png', "test_{$i}.png", (6553.5 * $i));
echo
'<img src="test_' . $i . '.png" />&nbsp;';
}

?>
To Top