我需要添加透明水印(最终图像的透明度 - 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;
}
函数结果:
但是 imagecopymerge 返回黑色背景而不是透明背景。我什至听到一些意见,认为 imagecopymerge 并不完全适合创建透明水印......
所以问题是:“如何在 jpeg 照片中添加透明水印(使用 alpha?)?”我怎样才能去掉那个黑色背景?(在原始PNG文件中是透明的)
最佳答案
好吧,我找到了解决方案:
function ImageAddWatermark($im, $stamp, $onLeft, $onTop, $margin){
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;
}
关于php - 为图像添加透明水印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21860759/