周梦康 发表于 2017-10-20 1468 次浏览

免费领取阿里云优惠券 我的直播 - 《PHP 进阶之路》

我的需求:给图片加上一个半透明的水印,所以会用到imagecopymerge函数

bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )

但是如果在原图$dst_im本色是一个透明的图片的情况下,会导致加完水印之后,整个图片是黑色的底。我的解决办法是

  1. 新建一张和原图大小一致的白色或者浅灰色的图片(使用浅灰色,是因为有的图片是存白色,然后背景为透明)
  2. 然后把原图拷贝到新建的图片上
  3. 再反过来拷贝回原图
if ($this->info['type'] == 'png') {
    // 如果是透明 png 先弄个浅灰色的底色 ==============================================
    $img = imagecreatetruecolor($this->info['width'], $this->info['height']);
    $color=imagecolorallocate($img,240,240,240);
    imagefill($img,0,0,$color);

    imagecopy($img, $this->img, 0, 0, 0, 0, $this->info['width'], $this->info['height']);
    imagecopy($this->img, $img, 0, 0, 0, 0, $this->info['width'], $this->info['height']);
    imagedestroy($img);
}

imagecopymerge($this->img, $water, $x, $y, 0, 0, $water_width, $water_height, $alpha);

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表