PHP GD, Tam Renkli JPG'nin üzerine şeffaf PNG

Bir web sitesi için özel görünümlü banner avatarı oluşturmaya çalışıyorum. Aşağıdaki resim ne olması gerektiğini gösterir:

Image to display

Gördüğünüz gibi, yarı saydam bir PNG'm var, bir kullanıcı tarafından sağlanan görüntü ve üçüncü resmi yapmak istiyorum.

Şu ana kadar yazdığım kod:

$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);

Aşağıda gösterilen gibi bir şey çıkarır:

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!

Eğer çıkarsam:

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

ve son satırı imagepng ($ transBanner) olarak değiştirin; , şeffaf png şeffaf kalacaktır !, ama ikisini bir araya getirmeye çalıştıktan sonra, şeffaflığı mükemmel bir siyah renk haline getirir.

Herhangi bir öneri?

1
hiç anladın mı?
katma yazar drzaus, kaynak
wideimage bunun zaten var, bence birleştirme veya maske , demolara bakın: wideimage.sourceforge.net/wp-content/current/demo/… - ile de yeniden boyutlandırabilirsiniz.
katma yazar hakre, kaynak
Bunu genişletilmiş ve birçok parametreyle yapılandırabilirsiniz. Ve bunu bir ya da birçok için yapabilirsiniz.
katma yazar hakre, kaynak
Teşekkür ederim, yine de - üzerine filigran koyabilirim. Genişleme ne yapıyor,% 100 opak bir görüntü alıyor, sonra% 50 opaklık ile yaptığım şeyi yapıyor. Ayrıca, bu web sitesinde sahip olacağım her kullanıcı için bunu yapmalıyım.
katma yazar ntgCleaner, kaynak
Daha derine ineceğim, teşekkürler!
katma yazar ntgCleaner, kaynak

1 cevap

Bir süre önce benzer bir şey yaptım. Orada gerçek bir renk görüntüsü kullandım. Sadece yeni bir resim oluşturun ve her birinin yeniden boyutlandırılmış bir sürümünü (avatar ve bindirme) kopyalayın:

<?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 ' a kopyalarken, avatarınızın gerçek bir ölçeği için genişlik/yükseklikte bazı hesaplamalar ekleyebilirsiniz. Yukarıdaki kod, avatarı bindirme boyutuna uyacak şekilde yeniden boyutlandıracaktır.

0
katma