4

そこで、PHP Doc でいくつかのコードを見つけ、それを少し編集して、持っている 2 つの画像をマージしました。その後、画像はサーバー上のフォルダーに保存されます。ただし、わずかな問題があり、なぜそれが起こっているのかわかりません。

まず私のコード:

 $glassurl = $_GET['GlassImg'];
    $frameurl = $_GET['FrameImg'];
    $filename = (int)date("H:i:s");

    $src = imagecreatefromgif($frameurl);
    $dest = imagecreatefromjpeg($glassurl);

    imagecolortransparent($src, imagecolorat($src, 0, 0));

    imagealphablending($dest, false);
    imagesavealpha($dest, true);
    imagealphablending($src, false);
    imagesavealpha($src, true);

    $src_x = imagesx($src);
    $src_y = imagesy($src);
    imagecopymerge($dest, $src, 0, 0, 0, 0, $src_x, $src_y, 100);

    // Output and free from memory
    imagepng($dest, 'uploads/imagetest.png');
    imagegif($dest);

    imagedestroy($dest);
    imagedestroy($src

);

次に、画像に関するいくつかの情報:

  1. 両方の画像はまったく同じサイズです
  2. 「パターン」画像は単なるブロックの色/パターンです
  3. フレーム画像は、フレーム内に透明な部分があります (パターンが透けて見えるようにするため)。
  4. 余分な模様を目立たなくするために、フレームの周囲を白くしています。

これらのパーツがあるため、フレームをパターンに重ねると、ガラスのパターンが内側にある窓枠が生成され、白が残りのパターンを隠すことを期待していました.

説明するために、画像を提供しました。そして何が起こるか。

パターン:

パターン

フレーム:

フレーム

結果:

結果

ご覧のとおり、期待した結果にはなりません。誰が私が間違っているのか教えてもらえますか? フレームをパターンに重ねて、透明な中心を維持し、余分な白を使用して残りのパターンを覆いたいと思います。どんな助けでも大歓迎です。

4

2 に答える 2

5

あなたのフレームには白い縁があることに注意してください。窓をきれいにしたい場合は、それをトリミングして、imagecolortransparentこれを使用できない場合は下に追加されたものを削除する必要があります

$imgl = "thumb/pattern.png";
$img2 = "thumb/frame.png";

$dest = imagecreatefrompng($imgl);
$src = imagecreatefrompng($img2);
imagecolortransparent($src, imagecolorat($src, 0, 0));

$src_x = imagesx($src);
$src_y = imagesy($src);
imagecopymerge($dest, $src, 0, 0, 0, 0, $src_x, $src_y, 100);

// Output and free from memory
header('Content-Type: image/png');
imagegif($dest);

imagedestroy($dest);
imagedestroy($src);

出力

ここに画像の説明を入力


あなたも持つことができます

$imgl = "thumb/pattern.png";
$img2 = "thumb/frame.png";

$dest = imagecreatefrompng($imgl);
$src = imagecreatefrompng($img2);

$src_x = imagesx($src);
$src_y = imagesy($src);

$srcNew = imagecreatetruecolor($src_x, $src_y);
ImageColorTransparent($srcNew, imageColorAllocate($srcNew, 0, 0, 0));
imagecopy($srcNew, $src, 70, 50, 78, 60, 473, 293);
imagecopymerge($dest, $srcNew, 0, 0, 0, 0, $src_x, $src_y, 100);

header('Content-Type: image/png');
imagegif($dest);

imagedestroy($dest);
imagedestroy($src);

出力

ここに画像の説明を入力

于 2012-10-22T08:28:28.240 に答える
0

あなたが説明したようにあなたの画像は透明ではありません、あなたが正しく説明したことを私が理解したならば、代わりにこれを使ってみてください。 ここに画像の説明を入力してください

また、そもそも本当に透明にした場合は、保存時に透明を白に変換しない(またはこれに関するオプションを確認する)プログラムを見つける必要があります。

于 2012-10-22T08:33:58.663 に答える