2017-09-05 2 views
0

현재 이미지에 워터 마크를 추가하는 스크립트를 작성하고 있습니다. 상기 워터 마크는 불투명도가 상이하다. 예를 들어, 기본 워터 마크 이미지는 완전히 볼 수있는 텍스트와 투명한 배경이있는 PNG입니다. 추가 할 때,이 기본 PNG를 내 필요에 맞게 페이드하고 불투명 한 워터 마크를 만들려고합니다.PHP : 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 영역은 검게 얻을 :

은 내가 PNG를 페이드 imagefilter()를 사용, 그렇게합니다. 워터 마크로 사용

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

그것은 다음과 같습니다 :

은 위의 코드의 결과입니다

:

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

원하는 결과이해야하지만

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; 
} 
관련 문제