0

2つの画像をマージするためのコードを作成しました。

私のコードは次のとおりです。

$rnd = rand("99000", "99999");

$dst_path = "/home/maxioutl/public_html/images/urunler/";
$dst_file_name = "tresim-{$rnd}.jpg";
$dst_file = $dst_path.$dst_file_name;

$dst = imagecreatetruecolor(250, 375);
imagefill($dst, 0, 0, imagecolorallocate($dst, 255, 255, 255));

$src = imagecreatefromjpeg("http://www.goldstore.com.tr/upload/product/raw/3.72925.0332.JPG");

imagecopymerge($dst, $src, 40, 60, 0, 0, 250, 375, 100);

imagejpeg($dst, $dst_file, 90);

結果:

黒のbg 黒の背景。それはどこにある?

4

3 に答える 3

1

それをしているのはimagecopymerge($dst, $src, 40, 60, 0, 0, 250, 375, 100);声明です。

250x375時計の実際の寸法ではない寸法を渡します。したがって、マージバウンディングボックスは続行され、黒が使用されます。コメントアウトすると、予想どおりに塗りつぶしから白い正方形が表示されるため、これを簡単に確認できます。

時計のグラフィックの正確な寸法を取得し(つまり、スルーgetimagesize)、それらをimagecopymergeに渡して、マージ時に正確にカットするようにする必要があります。

$arrSize = getimagesize($originalFile);
imagecopymerge($dst, $src, 40, 60, 0, 0, $arrSize[0], $arrSize[1], 100);
于 2012-12-21T23:05:06.103 に答える
0

あなたが書いたコードは画像を重ね合わせます。時計の画像から白いピクセルが削除されることはありません。

それらは基本的に重複しています。

両方の画像の寸法を循環し、各*白のピクセルを黒のピクセルまたは透明なピクセルに置き換える必要があります。

*白いピクセルは必ずしもrgb(255,255,255)を意味するわけではなく、rgb(> 235、> 235、> 235)のすべてのピクセルを「白」として扱うことを選択できます。

于 2012-06-06T12:55:23.577 に答える
0

関数は完全に黒い画像を作成しますここimagecreatetruecolorから撮影:

imagecreatetruecolor()は、指定されたサイズの黒い画像を表す画像識別子を返します。

于 2012-06-06T12:56:12.593 に答える