私は、コマンドラインで起動しますと、後でPHPを行うことができ、またはあなたが出て、そのビットを操作でき...
をさんは、それが最初に抽出してみましょう convert alpha.png -morphology edge octagon -threshold 50% edge.png
PHPで形態素操作に問題があると聞いていますので、ここでは形態を使用しないこの手順の代替方法です。基本的には、アルファレイヤーを複製し、統計を使用して各3x3ボックス内の最も明るいピクセルを探します(3x3ボックスに黒色と白いピクセルがあるエッジでのみ効果があります)。そして、影響を受けたピクセルを表示する元の結果。説明するだけで簡単にできます!
convert alpha.png \(+clone -statistic maximum 3x3 -threshold 50% \) -compose difference -composite edge.png
太っラインの5x5のボックスを使用します。
-edge 5
オプションがあります。私たちは生きて学習します。
ステップ3 - エッジが赤作り、透明
を休ま今、あなたは白が赤になりたいと黒を透明にする:
convert edge.png -fill red -opaque white -transparent black rededge.png
ステップ4 - 元のコンポジットレッドのアウトライン
そして最後に、あなたはコンポジット元以上のものにしたい:
convert tux.png rededge.png -composite result.png
全体豚
それとも、あなたはこのような一度にそれをすべて行うことができます。
convert tux.png \(+clone -alpha extract -morphology edge octagon -threshold 50% -fill red -opaque white -transparent black \) -composite result.png
-morphology edgeout
の微妙な効果を-morphology edge
よりも好む場合があります。
PHPバージョン
私のPHPスキルです「低」が、私は始めていると、いくつかの進歩を遂げています - 後で更新されますが、これまでのところ、それは次のようになります。
$image = new Imagick("tux.png");
$alpha = clone $image;
$alpha->separateImageChannel(Imagick::CHANNEL_ALPHA);
$alpha->negateImage(true);
$alpha->edgeImage(5);
$alpha->opaquePaintImage("white","red",65000,FALSE);
$alpha->transparentPaintImage("black",0.0,0,FALSE);
$image->compositeImage($alpha,Imagick::COMPOSITE_DEFAULT,0,0);
$image->writeImage("result.png");
それはかなりうまくいくようですが、いくつかの側面はおそらく整っている可能性があります - 具体的には65000
の魔法の番号と、おそらく不必要な複製やもの - 私はあなたにそれを残すでしょう!
モルフォロジーの例はここにありますhttp://phpimagick.com/Imagick/morphology?morphologyType=14 – Danack