8

ここ数時間、JPGの背景の上に透明な背景のPNGロゴを取得しようとしました。私はいくつかの方法といくつかのグローバル変数を試しましたが、希望する結果を得ることができないようです。

"最初の試み":

$overlay = new Imagick('overlay.png');
$image = new Imagick('background.jpg');

$image->compositeImage($overlay, Imagick::COMPOSITE_DEFAULT, 10, 10);
$image->writeImage('background.jpg'); //replace original background

$overlay->destroy();
$image->destroy();

ここに画像の説明を入力してください

ご覧のとおり、ジャガーのロゴはすべて黒です。


「2回目の試み」

$overlay = new Imagick('overlay.png');
$image = new Imagick('background.jpg');

$image->setImageColorspace($overlay->getImageColorspace() ); 
$image->compositeImage($overlay, Imagick::COMPOSITE_DEFAULT, 10, 10);
$image->writeImage('background.jpg'); //replace original background

$overlay->destroy();
$image->destroy();

ここに画像の説明を入力してください

これはジャガーのロゴのように見えますが、背景がめちゃくちゃになっています。


Imagick :: setImageMatteを試してみて、オーバーレイを白い背景に追加しようとしましたが(透明な背景が必要だと思いました)、それでも画像が正しく表示されません。上記の2つのスニペットの他の多くのバリエーションを試しましたが、それらはすべてPNGを完全にまたは部分的に黒くしているようです。

私は何が欠けているか、間違っていますか?誰かが私に正しい方向にナッジを与えることができますか?これはPHPで行う必要があることに注意してください。

どうもありがとうございます!

4

2 に答える 2

11

I am a huge idiot! Turns out I forgot to convert the images from CMYK to RGB. For anyone who might encounter this in the future, learn from my incompetence!

于 2013-03-28T15:32:48.583 に答える
2

別のpngの上に透明なpngを重ねようとしていました。PHP docs のこの行を使用しました。

$src1->compositeImage($src2, Imagick::COMPOSITE_MATHEMATICS, 0, 0);

しかし、私は同じ問題を抱えていました。オーバーレイは黒のみでした。これに変更すると、色が修正されたようです。

$src1->compositeImage($src2, Imagick::COMPOSITE_DEFAULT, 0, 0);
于 2015-10-22T14:54:52.200 に答える