Actually it does seem to work just not the way expected perhaps.
Looking at the fuzz option on ImageMagick's site (http://www.imagemagick.org/script/command-line-options.php#fuzz), "The distance can be in absolute intensity units or, by appending % as a percentage of the maximum possible intensity (255, 65535, or 4294967295)."
As it requires a float, the percentage value won't work so it actually one of the max intensity values. In my case, the images I was working with seemed to have max intensity values of 65535. So a fuzz of 6500, for roughly 10%, seemed to do the trick.
The part that might be problematic though is how do you determine the max intensity of a color/image? Using a static 6500 would be fine until I would have to convert an image with a max intensity other than 65535. If it's 255 it would wipe the entire image. Or fall far short on the fuzz with the larger value.Imagick::paintTransparentImage
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Imagick::paintTransparentImage
Референца за `imagick.painttransparentimage.php` со подобрена типографија и навигација.
Imagick::paintTransparentImage
(PECL imagick 2, PECL imagick 3)
Imagick::paintTransparentImage — Changes any pixel that matches color with the color defined by fill
Оваа функција е DEPRECATED Извршува нарачано дитерирање
= NULL
Ги менува сите пиксели што одговараат на бојата со бојата дефинирана со пополнување.
Параметри
target-
Change this target color to specified opacity value within the image.
alpha-
Нивото на проѕирност: 1.0 е целосно непроѕирно и 0.0 е целосно проѕирно.
fuzz-
Членот fuzz на сликата дефинира колку толеранција е прифатлива за да се сметаат две бои како исти.
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true на успешен исход.
Errors/Exceptions
Фрла ImagickException при грешка.
Дневник на промени
| Верзија | = NULL |
|---|---|
| Формат на сликата. Овој параметар беше додаден во верзијата на Imagick 2.0.1. | Сега дозволува стринг што ја претставува бојата како прв параметар. Претходните верзии дозволуваа само ImagickPixel објект. |
Белешки од корисници 3 белешки
Have a look at this thread on Stackoverflow for the answer regarding how to determine the max intensity of an image.
http://stackoverflow.com/questions/26239130/determine-max-possible-intensity-of-image/26240656#26240656
In short here is the code to make the $fuzz parameter behave more like you would expect (it now represents a percentage between 0-100). The $fuzz value should now be a float between 0 and 1.
class SaneImagick extends Imagick
{
public function paintTransparentImage($target, $alpha, $fuzz)
{
$iQuantumDepth = pow(2, $this->getQuantumDepth()['quantumDepthLong']);
return parent::paintTransparentImage($target, $alpha, $fuzz * $iQuantumDepth);
}
}The fuzz is just working well in a range of 0 to 65535.
I suggest you to try to move fuzz on a color spectrum image.
1/ Get a color spectrum ( Google Image has a lot )
2/ Try this code :
<?php
function fuzzTest($source, $target, $fuzz) {
// Loads image
$im = new Imagick($source);
// Resizes images to make them easily comparable
$im->resizeImage(320, 240, Imagick::FILTER_LANCZOS, 1, true);
// Apply fuzz
$im->paintTransparentImage($im->getImagePixelColor(0, 0), 0, $fuzz);
// Writes image
$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" /> ';
}
?>