2014-02-18 128 views
1

我需要添加透明水印(最終圖像中的透明度 - 80%)。我創造了這個函數來處理它:在圖像中添加透明水印

function ImageAddWatermark($im, $stamp, $onLeft, $onTop, $margin){  
     // $stamp = imagecreatformpng(...) -> GD resource? 
     // not important part - it calculates position of watermark 
     if($onLeft){ 
      $orgX = $margin; 
     } else { 
      $orgX = imagesx($im)-$margin-imagesx($stamp); 
     } 

     if($onTop){ 
      $orgY = $margin; 
     }else { 
      $orgY = imagesy($im)-$margin-imagesy($stamp); 
     } 

     imagecopymerge($im, $stamp, $orgX, $orgY, 0, 0, imagesx($stamp), imagesy($stamp), 50); 

     return $im; 
    } 

功能結果: error

但imagecopymerge返回的黑色背景,而不是透明的。我甚至聽到一些意見,imagecopymerge不是正確的創建透明水印...

所以問題是:「我怎樣才能在jpeg照片中添加一個透明的水印(使用alpha?)?」我怎樣才能擺脫那個黑色背景?(在原始PNG文件是透明的)

+0

調用此函數之前是什麼'$ stamp'?它是一個GD資源嗎?你是如何加載它的? – cmorrissey

+0

@cmorrissey如果GD資源是「imagecreatefrompng(...)」,當然我稱之爲 – tomascapek

+0

在你調用'imagecreatefrompng(...)'' – cmorrissey

回答

0

嗯,我找到了解決辦法:

功能ImageAddWatermark($ IM,$郵票,$ onLeft,$ ontop的,$保證金){

if($onLeft){ 
     $orgX = $margin; 
    } else { 
     $orgX = imagesx($im)-$margin-imagesx($stamp); 
    } 

    if($onTop){ 
     $orgY = $margin; 
    }else { 
     $orgY = imagesy($im)-$margin-imagesy($stamp); 
    } 

    // creating a cut resource 
    $cut = imagecreatetruecolor(imagesx($stamp), imagesy($stamp)); 

    // copying relevant section from background to the cut resource 
    imagecopy($cut, $im, 0, 0, $orgX, $orgY, imagesx($stamp), imagesy($stamp)); 

    // copying relevant section from watermark to the cut resource 
    imagecopy($cut, $stamp, 0, 0, 0, 0, imagesx($stamp), imagesy($stamp)); 

    // insert cut resource to destination image 
    imagecopymerge($im, $cut, $orgX, $orgY, 0, 0, imagesx($stamp), imagesy($stamp), 50); 

    return $im; 
}