だから私はこの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'
私がそのラインアウトにコメントするとき、それ以外はすべてがうまく機能しているようです。このエラーを防ぐにはどうすればよいですか?