2016-04-04 86 views
1

画像の任意のピクセルを色付け/置換する方法を知りたいのですが、不透明なピクセルで透明になります。ImageMagick/Imagick:アルファチャンネルのPNGを2色の画像に変換する(カラー、透明)

たとえば、透明なピクセルを持つ多色のロゴを使用すると、#ff0000という色のロゴに変換し、透明な背景は変更しません。

私はこれをPHP Imagick Libraryで実現したいと考えています。私は良い文書を見つけることができません。

私はImagick::thresholdImageが助手になると思っていましたが、しきい値パラメータについての説明はありません。

このコードの断片で最も良い結果が得られます。しかし、まだ完全には動作していません。いくつかのピクセル - 私は、アルファ> 0と< 1のものは置き換えられないと思います。

$image = new \Imagick($source); 
$image->setImageFormat('png'); 

$fill = new \ImagickPixel('#ff0000'); 
$image->thresholdImage(0); 
$image->paintOpaqueImage('#ffffff', $fill, 1); 

$image->writeImage($destination); 
+0

私はあなたが実際に何をしたいのか、100%確実ではないが、私はあなたのアルファをしたいと思います/透明度チャンネルを中間値なしで100%または0%に制限する必要があるため、アルファチャンネルのしきい値を設定する必要があるため、背景色を設定したいと思う'thresholdImage(Imagick :: getQuantum()-1、imagick :: CHANNEL_ALPHA)'のようなことをしてください。 –

答えて

2

私が知っていると私は/色付け画像の任意のピクセルを置き換えることができますか、知りたいが、それは不透明なピクセルと透明(完全に)ではありません。

ほとんど間違いありません。

以下のコードはあなたが尋ねていることをしています(私は思う)、出力はひどいです。おそらく、あなたが望んでいたことを示すために、サンプル入力イメージと、Photoshopで編集した期待される出力イメージを与えるべきでしょう。

入力画像:

enter image description here

出力画像:

enter image description here

$imagick = new Imagick("fnord.png"); 

// Get the alpha channel of the original image. 
$imagick->separateImageChannel(\Imagick::CHANNEL_ALPHA); 

// Make all the colors above this pure white. 
$imagick->whiteThresholdImage("rgb(254, 254, 254)"); 

// Make all the colors below this pure black. 
$imagick->blackThresholdImage("rgb(254, 254, 254)"); 

// We want the mask the other way round 
$imagick->negateImage(false); 

$imagickCanvas = new \Imagick(); 

$imagickCanvas->newPseudoImage(
    $imagick->getImageWidth(), 
    $imagick->getImageHeight(), 
    "xc:rgb(255, 0, 0)" 
); 

// Copy the mask back as the alpha channel. 
$imagickCanvas->compositeImage($imagick, \Imagick::COMPOSITE_COPYOPACITY, 0, 0); 

// Write out the image. 
$imagickCanvas->setImageFormat('png'); 
$imagickCanvas->writeImage("./output.png"); 
+0

ありがとう、man。これだよ。たとえ出力がひどく見えても。これがまさに望ましい出力です。 (私の使用例では、あなたの例のようなアルファ値を持つ大きな(ger)領域はありません。また、要求された画像のほとんどがより大きな半不透明領域でぼやけた輪郭を含んでいても、しきい値を調整して妥協する –

関連する問題