確認
半角→@
全角→@
仕様らしい…そういうもん?
なんか紛らわしいような。
半角のつもりが全角入ったりしそうだけど、昨今の状況では影響が少ないと判断したのだろうか。半角→@
全角→@
参考
http://answers.microsoft.com/ja-jp/windows/forum/windows_7-ime/%E3%83%A1%E3%82%A4%E3%83%AA%E3%82%AA%E3%81%AE/d4e14eee-b290-4fc6-867c-8561fd8742d6
/**
* 引数の$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;
};
・マット色