Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在图像中添加透明水印_Php - Fatal编程技术网

Php 在图像中添加透明水印

Php 在图像中添加透明水印,php,Php,我需要添加透明水印(最终图像的透明度-80%)。我创建了这个函数来处理它: function ImageAddWatermark($im, $stamp, $onLeft, $onTop, $margin){ // $stamp = imagecreatformpng(...) -> GD resource? // not important part - it calculates position of watermark

我需要添加透明水印(最终图像的透明度-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;
}

调用此函数之前,
$stamp
是什么?它是GD资源吗?您是如何加载它的?@cmorrissey如果GD资源是“imagecreatefrompng(…)”,当然我称之为itadd
imagealphablending($stamp,true)
调用
imagecreatefrompng(…)
重复的可能副本也不起作用。。