【问题标题】:Add transparent watermark into image在图像中添加透明水印
【发布时间】:2014-03-18 14:51:19
【问题描述】:

我需要添加透明水印(最终图像的透明度 - 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 文件中是透明的)

【问题讨论】:

  • 在调用这个函数之前$stamp是什么?它是GD资源吗?你是怎么加载的?
  • @cmorrissey 如果 GD 资源是“imagecreatefrompng(...)”,当然我称之为
  • 拨打imagecreatefrompng(...)后添加imagealphablending($stamp, true);
  • 重复也不起作用..

标签: php


【解决方案1】:

好吧,我找到了解决方案:

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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2023-03-18
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多