3

Imagickオブジェクト内の特定の幅、高さ、および上部の位置で領域を透明にしたい。

たとえば、15ピクセルから上部まで30ピクセルx 30ピクセルの透明な領域が必要ですが、それを行う方法が見つかりません。

$canvas1 = new Imagick();

$canvas1->newImage(30,60,'black','png');

助けてください。

4

4 に答える 4

3

これは少し簡単な方法かもしれません。@AndreKRのセットアップコードをリサイクルして開始しました。

$im = new Imagick();
$im->newImage(100,100, 'red');
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_ACTIVATE); // make sure it has an alpha channel
$box=$im->getImageRegion(30,30,15,15);
$box->setImageAlphaChannel(Imagick::ALPHACHANNEL_TRANSPARENT);
$im->compositeImage($box,Imagick::COMPOSITE_REPLACE,15,15);
于 2015-08-23T12:22:56.347 に答える
2

次のように、透明インク(透明インクではない)で塗りつぶすことができます。

$im->floodFillPaintImage('#FF000000', 10, '#FFFFFF', 0, 0, false);

この投稿では、ImageMagickの世界で重要な人物であると思われるアンソニーは、透明度を持って描くことはできないと述べています。

したがって、パンチ画像を作成し、それを使用して実際の画像の透明な領域をパンチアウトする必要があるようです。ここでパンチを作成するには、透明な黒地に不透明な長方形を描画してから、画像全体を反転します。

$punch = new Imagick();
$punch->newImage(100,100, 'transparent');
$drawing = new ImagickDraw();
$drawing->setFillColor(new ImagickPixel('black'));
$drawing->rectangle(15, 15, 45, 45);
$punch->drawImage($drawing);
$punch->negateImage(true, Imagick::CHANNEL_ALPHA);

パンチ

パンチする前の実際の画像は次のとおりです。

$im = new Imagick();
$im->newImage(100,100, 'red');
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_ACTIVATE); // make sure it has
                                                           // an alpha channel

画像

これで、パンチ画像からアルファチャネルをコピーできます。私にはわからない理由で、明白な方法は機能しません:

// Copy over the alpha channel from one image to the other

// this does NOT work, the $channel parameter seems to be useless:
// $im->compositeImage($punch, Imagick::COMPOSITE_SRC, 0, 0, Imagick::CHANNEL_ALPHA);

失敗した結果

ただし、これらは両方とも機能します。

// Copy over the alpha channel from one image to the other

// $im->compositeImage($punch, Imagick::COMPOSITE_COPYOPACITY, 0, 0);
// $im->compositeImage($punch, Imagick::COMPOSITE_DSTIN, 0, 0);

結果

(水色はWindowsフォトビューアーの背景であり、透明な領域を示します。)

于 2015-08-23T05:34:02.323 に答える
0

試す

$canvas1->setImageOpacity(0);
于 2012-09-10T10:18:02.090 に答える
0

不透明度は次のように設定できます

$image->setImageOpacity(0.0);

0.0に設定すると、作成した画像が透明になります

詳細については、Imagickで不透明度を設定できます

特定の領域で必要な場合は、GDライブラリ関数を使用して、次のような方法でアプローチを変更する必要があります。

 $img = imagecreatefrompng($imgPath); // load the image
 list($width,$height) = getimagesize($imgPath); // get its size
 $c = imagecolortransparent($img,imagecolorallocate($img,255,1,254)); // create      transparent color, (255,1,254) is a color that won't likely occur in your image
 $border = 10;
 imagefilledrectangle($img, $border, $border, $width-$border, $height-$border, $c); // draw transparent box
 imagepng($img,'after.png'); // save

私はここの別のフォーラムに投稿されている同様の要件を見ることができました

于 2012-09-10T10:19:46.980 に答える