Php 在图像中添加透明水印
我需要添加透明水印(最终图像的透明度-80%)。我创建了这个函数来处理它:Php 在图像中添加透明水印,php,Php,我需要添加透明水印(最终图像的透明度-80%)。我创建了这个函数来处理它: function ImageAddWatermark($im, $stamp, $onLeft, $onTop, $margin){ // $stamp = imagecreatformpng(...) -> GD resource? // not important part - it calculates position of watermark
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;
}
调用此函数之前,
$stamp
是什么?它是GD资源吗?您是如何加载它的?@cmorrissey如果GD资源是“imagecreatefrompng(…)”,当然我称之为itaddimagealphablending($stamp,true)
调用imagecreatefrompng(…)
重复的可能副本也不起作用。。