/** 
 * 引数の$pathにあるファイル(アルファ付png想定)を$mattColorをマット色とした単色透過に変換
 * @param string $path
 * @param string $mattColor "00ff00" // #なし16進数表現
 * @return Imagick
 */
$effectMatt = function ($path, $mattColor)
{
 $im = new Imagick($path);
 // mattColorのrgb表現を作っておく(かけ合わせ用)
 $mattRgb = array(
  'r'  => hexdec((int)substr($mattColor, 1, 2)),
  'g'  => hexdec((int)substr($mattColor, 3, 2)),
  'b'  => hexdec((int)substr($mattColor, -2))
 );

 // 色のアルファ合成関数
 $combineAlpha = function ($dst, $src, $srcAlpha)
 {
  $res = $dst * (1.0 - $srcAlpha) + $src * $srcAlpha;
  return min(255, (int)$res);
 };

 // 画像中の各ピクセルごとに処理
 $imIte = $im->getPixelIterator();

 foreach ($imIte as $iteY => $row) {
  foreach ($row as $iteX => $pixel) {
   // trueにするとdouble値、defaultのfalseは整数が返る
   $normalized = true;
   $tmp = $pixel->getColor($normalized); // r, g, b, a
   // 0.0=完全透明の場合と、1.0=完全不透明の場合はskip
   if (0.0 < $tmp['a'] && $tmp['a'] < 1.0) {
    $color = $pixel->getColor(! $normalized); // 0-255で再取得
    $color = array(
     'r' => $combineAlpha($mattRgb['r'], $color['r'], $tmp['a']),
     'g' => $combineAlpha($mattRgb['g'], $color['g'], $tmp['a']),
     'b' => $combineAlpha($mattRgb['b'], $color['b'], $tmp['a'])
    );
    // setColor用引数文字列作成
    $colorf = "rgb({$color['r']},{$color['g']},{$color['b']})";
    $pixel->setColor($colorf);
    $i++;
   }
  }

  // 本画像へ反映
  $imIte->syncIterator();
 }
 return $im;
};
・マット色
単純に$im->setImageType("png8");とかしても単色透過は可能なのだけど、マット色が無くアルファ付のピクセルのデータは全て透明色になってしまった。
photoshopであるような背景色になじませるための色の設定がしたい。

 ・quantizeimageメソッド
http://www.php.net/manual/ja/imagick.quantizeimage.php
マニュアル見てもなんのことやら…
http://kyle-in-jp.blogspot.jp/2009/02/imagemagickphp_09.html
減色できるようだ。