doujieluo5875 2013-12-10 17:22
浏览 49
已采纳

PHP - 创建一个带有半透明徽标/水印的PNG文件

I'm trying to place a logo into a white image and make it semi-transparent to be used as a watermark.

Here is my code...

   // load the stamp and the photo to apply the watermark to
   if (file_exists($logoPath)) {

      $im = imagecreatefrompng($logoPath);
      $size = getimagesize($logoPath);

      $stamp = imagecreatetruecolor(612, 792);
      imagefilledrectangle($stamp, 0, 0, 612-1, 792-1, 0xFFFFFF);
      $sx = imagesx($stamp);
      $sy = imagesy($stamp);

      // center width and height
      $centerX=$sx/2-$size[0]/2;
      $centerY=$sy/2-$size[1]/2;

      $res=imagecopymerge($stamp, $im, $centerX,$centerY, 0, 0, $sx, $sy, 15);

      $waterPath = $watermark_path.$broker_id."_watermark.png";

      // Save the image to file and free memory
      imagepng($stamp, $waterPath);
      imagedestroy($stamp);
      imagedestroy($im);
   }

It all looks good to me but when I run it I get this...

http://i43.tinypic.com/2cyft06.jpg

...as you can see, the lower right quad of the image is getting colored for some reason.

  • 写回答

1条回答 默认 最新

  • doumigu9594 2013-12-10 17:50
    关注

    if you take a look at imagecopymerge() docs, the 7th and 8th arguments represent the source image width and height amount. You appear to pass the target image height (612, 792), so basically you're trying to copy a 612x792 slice from your logo image, which looks much smaller.

    I'll try to better describe the arguments:

    $res = imagecopymerge(
              $stamp,           // <- target image
              $im,              // <- source image, from where to copy (logo)
              $centerX,         // <- target x-position (where to place your logo), 
              $centerY,         // <- target y-position 
              0,                // <- source x-position (x-offset from where to start copy)
              0,                // <- source y-position
              imagesx($im),     // <- amount to copy from source (width)
              imagesy($im),     // <- amount... (height)
              15                // <- i have no idea what this is :)
            );
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 nslt的可用模型,或者其他可以进行推理的现有模型
  • ¥15 arduino上连sim900a实现连接mqtt服务器
  • ¥15 vncviewer7.0安装后如何正确注册License许可证,激活使用
  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并2
  • ¥66 关于人体营养与饮食规划的线性规划模型
  • ¥15 基于深度学习的快递面单识别系统
  • ¥15 Multisim仿真设计地铁到站提醒电路
  • ¥15 怎么用一个500W电源给5台60W的电脑供电
  • ¥15 请推荐一个轻量级规则引擎,配合流程引擎使用,规则引擎负责判断出符合规则的流程引擎模板id
  • ¥15 Excel表只有年月怎么计算年龄