PHP GD、フルカラーJPGの透過PNGオンタップ

私はウェブサイトのためのカスタム見栄えのバナーのアバターを作成しようとしています。以下のイメージは、何が起こる必要があるかを示しています。

Image to display

ご覧のとおり、私は半透明のPNGを持っています。ユーザーが提供した画像です.3番目の画像を作りたいと思います。

これまでに書いたコードは次のとおりです。

$user_id = 1;   
$name_qry = mysql_query("SELECT a.*, b.* FROM mbr_user_name a, mbr_user_information b WHERE a.user_id = '$user_id' AND b.user_id = '$user_id'");
    while($row = mysql_fetch_array($name_qry)){

    $user_name = $row['user_name'];
    $user_email = $row['user_email'];
    $user_avatar = $row['user_avatar'];
    }

    $height = "208";
    $width = "199";
    $top_image = "../images/bannerShadow_cccccb.png";
    $image = imagecreatefrompng("." . $user_avatar);
    $banner = imagecreatefrompng($top_image);

        //Keeping the Banner Trasnparent
        $transBanner = imagecreate($width, $height);
        $color = imagecolorallocatealpha($transBanner, 0, 0, 0, 127);
        imagefill($transBanner, 0, 0, $color);
        imagecopyresampled($transBanner, $banner, 0, 0, 0, 0, $width, $height, $width, $height);


    imagealphablending($transBanner, true);
    imagecopymerge($image, $transBanner, 0, 0, 0, 0, 199, 208, 100);



    imagepng($image);

それは以下のようなものを出力します:

Bad Image

I obviously still have to make the user provided image the right size, That is a simple math problem - Right now, I have to make the transparency stay transparent!

私が取る場合:

imagealphablending($transBanner, true);
imagecopymerge($image, $transBanner, 0, 0, 0, 0, 199, 208, 100);

最後の行を imagepng($ transBanner); に変更すると、透明なPNGは透明なままになりますが、2つをまとめると完全な黒色になります。

助言がありますか?

1
あなたはそれを理解したことがありますか?
追加された 著者 drzaus,
wideimage にはすでにこれがあります。 merge または mask code>、デモをご覧ください: wideimage.sourceforge.net/wp-content/current/demo/… - あなたもそのサイズを変更できます。
追加された 著者 hakre,
あなたはwideimageと多くのパラメータでそれを設定することができます。そして、あなたはそれを1回でも多くでもやり遂げることができます。
追加された 著者 hakre,
ありがとう、私はすでにそれに透かしを入れることができます。ワイド画像が何をしているのか、100%不透明な画像を撮っています。そして、私が50%不透明で行っていることを正確に行います。さらに、私はこのウェブサイト上にあるすべてのユーザーに対してこれを行う必要があります。
追加された 著者 ntgCleaner,
私は深く掘り下げます、ありがとう!
追加された 著者 ntgCleaner,

1 答え

私は以前何か類似したことをしました。私は真のカラー画像を使用しました。新しい画像を作成し、サイズの変更されたバージョン(アバターとオーバーレイ)をコピーしてください:

<?php
$imgOverlay = imagecreatefrompng('overlay.png');
$imgAvatar = imagecreatefrompng('avatar.png');

$width = imagesx($imgOverlay);
$height = imagesy($imgOverlay);

$imgBanner = imagecreatetruecolor($width, $height);
imagecopyresampled($imgBanner, $imgAvatar, 0, 0, 0, 0, $width, $height, imagesx($imgAvatar), imagesy($imgAvatar));
imagecopyresampled($imgBanner, $imgOverlay, 0, 0, 0, 0, $width, $height, $width, $height);

header('Content-type: image/png');
imagepng($imgBanner);

$ imgAvatar $ imgBanner にコピーするときに、あなたのアバターの実際のスケールの幅/高さに計算を追加することができます。上のコードは、オーバーレイサイズに合わせてアバターのサイズを変更するだけです。

0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com