2013-03-08 4 views
6

지난 몇 시간 동안 JPG 배경 위에 투명한 배경을 가진 PNG 로고를 얻으려고했습니다. 몇 가지 방법과 여러 전역 변수를 시도했지만 원하는 결과를 얻을 수없는 것 같습니다.Imagick을 사용하여 JPG의 오버레이 PNG

"첫 시도"

$overlay = new Imagick('overlay.png'); 
$image = new Imagick('background.jpg'); 

$image->compositeImage($overlay, Imagick::COMPOSITE_DEFAULT, 10, 10); 
$image->writeImage('background.jpg'); //replace original background 

$overlay->destroy(); 
$image->destroy(); 

enter image description here

당신이 볼 수 있듯이, 재규어 로고가 모두 검은 색이다.


"두 번째 시도"

$overlay = new Imagick('overlay.png'); 
$image = new Imagick('background.jpg'); 

$image->setImageColorspace($overlay->getImageColorspace()); 
$image->compositeImage($overlay, Imagick::COMPOSITE_DEFAULT, 10, 10); 
$image->writeImage('background.jpg'); //replace original background 

$overlay->destroy(); 
$image->destroy(); 

enter image description here

가해야처럼 재규어 로고가 보이는이 하나 있지만, 배경은 모두 지금 엉망이다.


내가 Imagick::setImageMatte으로 노력하고 overlay to a white background을 추가하려고하고 아직도 제대로 이미지가 표시되지 않습니다 (나는 투명한 배경을 가질 필요가 않습니다 생각). 위의 2 개본에서 다른 많은 변형을 시도했지만 PNG를 완전히 또는 부분적으로 검정색으로 만듭니다.

무엇이 잘못되었거나 잘못 되었습니까? 누구든지 올바른 방향으로 찔러 주실 수 있습니까? 이 작업은 PHP에서 수행해야합니다.

대단히 감사합니다!

답변

10

나는 거대한 바보입니다. 내가 CMYK에서 RGB로 이미지를 변환하는 것을 잊어 버렸습니다. 앞으로이 문제가 발생할 수있는 사람은 내 무능력에서 배우십시오!

2

다른 PNG 상단에 투명도가있는 png를 오버레이하려했습니다. 나는이 라인을 the PHP docs에서 사용했다.

$src1->compositeImage($src2, Imagick::COMPOSITE_MATHEMATICS, 0, 0); 

하지만 같은 문제가 발생했습니다. 오버레이는 검은 색으로 만 나타납니다. 이것으로 변경하면 색상을 수정하는 것처럼 보였습니다.

$src1->compositeImage($src2, Imagick::COMPOSITE_DEFAULT, 0, 0); 
관련 문제