ImageMagick — setImageAlphaChannel не работает (php)

Итак, у меня есть эта команда IM ($plistnew - это список координат, как и следовало ожидать для многоугольника):

convert in.png ( -size 101x101 xc:black -fill white \
    -draw "polygon $plistnew" -alpha off \
    -crop 101x100+0+1 +repage \
    -scale 101x1! ) \
    -clut out.png

Итак, мне нужно преобразовать это в чистый PHP. Я был довольно успешным, за исключением одной оставшейся проблемы с setImageAlphaChannel().

В любом случае, это мой PHP:

$tmpa = new Imagick(); // for the image I'm assuming is generated inside the parens
$tmpa->newPseudoImage(101, 101, 'canvas:black'); // xc:black

$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white')); // -fill white
$draw->polygon($points); // -draw "polygon $plistnew"

$tmpa->drawImage($draw);
$tmpa->setImageAlphaChannel(self::ALPHACHANNEL_DEACTIVATE); // -alpha off
$tmpa->cropImage(101, 100, 0, 1); // -crop 101x100+0+1

// +repage
$tmpa->resetImagePage('');

$tmpa->scaleImage(101, 1); // -scale 101x1! -- I think scaleImage() ignores ratio per the ! by default ... I'm not positive though.

$im = new Imagick('in.png');
$im->clutImage($tmpa); // -clut
$im->writeImage('out.png');
$tmpa->destroy();

Переменная $points представляет собой массив, правильно сформированный для использования с ImagickDraw::polygon().

Эта строка:

$tmpa->setImageAlphaChannel(self::ALPHACHANNEL_DEACTIVATE);

полностью не работает. Выдает эту ошибку:

PHP Fatal error:  Uncaught exception 'ImagickException' with message 'Unable to set image alpha channel'

Когда я комментирую эту строку, в остальном кажется, что все работает нормально. Как я могу предотвратить эту ошибку?

12
задан gregghz 31 May 2012 в 16:21
поделиться