PHP GD, празрысты PNG наверх Поўнакаляровы JPG

Я спрабую стварыць карыстацкі перспектыўны банер аватар для вэба-сайта. На малюнку ніжэй паказана, што павінна адбыцца:

Image to display

Як вы можаце бачыць, у мяне ёсць напаўпразрысты PNG, прадстаўлены карыстальнікам малюнак, і я хацеў бы зрабіць трэцяе малюнак.

Код, які я напісаў да гэтага часу:

$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 будзе заставацца празрыстай!, але калі я спрабую паставіць іх разам, гэта робіць празрыстасць ідэальны чорны колер.

Любыя прапановы?

1
Вы калі-небудзь зразумець гэта?
дададзена аўтар drzaus, крыніца
Я думаю, што WideImage значыць гэта ўжо, альбо Аб'яднаць або <маска/код>, глядзіце дэмкі: wideimage.sourceforge.net/wp-content/current/demo/… - вы можаце змяніць памер з ім, таксама.
дададзена аўтар hakre, крыніца
Вы можаце наладзіць, што з WideImage і многімі параметрамі. І вы можаце зрабіць гэта адзін раз ці для многіх.
дададзена аўтар hakre, крыніца
Дзякуй, хоць - я ўжо магу паставіць вадзяной знак на ім. Што WideImage робіць, прымаюць 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
дададзена