2011-06-23 1 views
4

で透明度を持つ2枚の画像をマージします。私の問題は、イメージを統合すると、イメージの透明部分がドロップされてしまうことです。 enter image description here (注: enter image description hereは、私はPHPを経由して背景透明度を持ついくつかの.png年代の合成画像を作成し、自分のデータベースに結果画像を保存しようとしてるPHP

そして、私はもっとこのような何かを探しています:これは、このような画像を生成

$base = imagecreatefrompng('application/assets/images/vel1_bg.png'); 
    imagealphablending($base, true); 
    list($baseWidth, $baseHeight, $type, $attr) = getimagesize('application/assets/images/vel1_bg.png'); 

    $user_board_items = $this->config->item('user_board_items'); 

    foreach($array as $key => $value){ 
     $item = imagecreatefrompng('application/assets/images/items/' . $user_board_items[$value[0]] . '.png');   
     imagealphablending($item, true); 
     list($width, $height, $type, $attr) = getimagesize('application/assets/images/items/'. $user_board_items[$value[0]] . '.png'); 

     imagecopymerge($base, 
        $item, 
        floor(($value[1]/100) * $baseWidth), 
        floor(($value[2]/100) * $baseHeight), 
        0, 
        0, 
        $width, 
        $height, 
        100); 
     imagedestroy($item); 
    } 

    //We have to capture the output buffer 
    ob_start(); 
    imagepng($base); 
    $baseimg = ob_get_clean(); 

この

は、合成画像を作成するための私のコードです透明セクションがどのように表現されるか)

+2

これが役立つことがあります。http://stackoverflow.com/questions/3355993/phpgd-imagecopymerge-not-retaining-png-transparencies/3356419#3356419私は 'imagecopymergeを思い出すように見えます'問題を引き起こす可能性があります。代わりに 'imagecopyresampled'を試してください。 – Mike

答えて

4

マージ透明画像のために)(imagecopymergeを使用しないでください。

それはあなたのスクリプトの中で()imagecopyresampled使用することをお勧めします。 imagecopyresampled

0

前に述べたように、さまざまなソリューションをしようと数時間後にも私のために働きました。あなたが最後の1を削除しますが、ソースの幅と高さを追加する必要が除いて渡されるパラメータは、同じまま。あなたの呼び出しは、おそらく次のようになります。

imagecopyresampled($base, 
       $item, 
       floor(($value[1]/100) * $baseWidth), 
       floor(($value[2]/100) * $baseHeight), 
       0, 
       0, 
       $width, 
       $height, 
       $width, 
       $height); 
関連する問題