2017-09-05 11 views
0

私は現在画像にウォーターマークを追加するためのスクリプトを書いています。前記透かしはその不透明度が異なる。 たとえば、ベースウォーターマークイメージは、完全に表示可能なテキストと透明な背景を持つPNGです。追加すると、私はこのベースPNGを消して、私のニーズに合わせて不透明な透かしを作ることができます。これを行うにはPHP:imagefilter()で不透明度を追加すると既に透明な領域が黒く塗りつぶされています

は、私はPNGをフェードするimagefilter()を使用します。

$opacity = 0.25; 
$watermarkRes = imagecreatefrompng($filename); 

imagealphablending($watermarkRes, false); 
imagesavealpha($watermarkRes, true); 

$transparency = 1 - $opacity; 
imagefilter(
    $watermarkRes, 
    IMG_FILTER_COLORIZE, 
    0, 
    0, 
    0, 
    127*$transparency 
); 
imagepng($watermarkRes, $filename); 

すべての非透過領域がきれいに色あせますが、既存のtransarent領域が黒くなっます。

これは、上記のコードの結果です:

:所望の結果は、このする必要がありますが

https://preview.ibb.co/mLvKPF/15027295625991d55a1ef081_42502547.jpg

:それはこのようになります透かしとして使用

https://preview.ibb.co/j8zePF/TEST.png

https://preview.ibb.co/f81R4F/TEST_15027295625991d55a1ef081_42502547.jpg

透過領域をそのまま維持しながら、テキストに不透明度を追加するにはどうすればよいですか?

答えて

0

Nevermind。問題は機能そのものではなく、あらかじめその用途に応じてウォーターマークの高さをリサイズしたということです。

私は、透かしのサイズを変更するために、このコードを削除:

$new_image = imagecreatetruecolor($width, $height); 
imagecopyresampled($new_image, $watermarkRes, 0, 0, 0, 0, $width, $height, imagesx($watermarkRes), imagesy($watermarkRes)); 
$watermarkRes = $new_image; 

、代わりにこの質問への答えで提供Dyceyのサイズ変更コードを使用:私が作成した私のケースでは

How do I resize pngs with transparency in PHP?

を画像のサイズを変更するこの機能:

/** 
* @param int $width 
* @param int $height 
*/ 
public function resize($width, $height) 
{ 
    $new_image = imagecreatetruecolor($width, $height); 

    if($this->image_type === IMAGETYPE_PNG || $this->image_type === IMAGETYPE_GIF) { 
     imagealphablending($new_image, false); 
     imagesavealpha($new_image,true); 
     $transparent = imagecolorallocatealpha(
      $new_image, 255, 255, 255, 127 
     ); 
     imagefilledrectangle(
      $new_image, 0, 0, $width, $height, $transparent 
     ); 
    } 

    imagecopyresampled(
     $new_image, 
     $this->image, 
     0, 0, 0, 0, 
     $width, $height, 
     imagesx($this->image), imagesy($this->image) 
    ); 
    $this->image = $new_image; 
} 
関連する問題