PHP合成解决png图片无法设置透明度的问题

      发布在:后端技术      评论:0 条评论

一般我们使用imagecopymerge设置透明度无法正确解析png图片,由于png文件的透明背景没有被正确处理导致的。在处理png文件时,需要使用imagecolortransparent()函数将透明颜色设置为图像的透明色。

以下是修改后的代码示例:

// 载入原始图片和水印图片$source_image = imagecreatefromjpeg('death-valley-3133502_1280.jpg');$watermark_image = imagecreatefrompng('c08f5b9a5db27bf40bf1174c27c1db5e.png');// 获取水印图片的宽度和高度$watermark_width = imagesx($watermark_image);$watermark_height = imagesy($watermark_image);// 创建一张与水印图片大小相同的空白图片,并将其透明区域设为透明色$blank_image = imagecreatetruecolor($watermark_width, $watermark_height);imagefill($blank_image, 0, 0, imagecolorallocatealpha($blank_image, 0, 0, 0, 127));imagecolortransparent($blank_image, imagecolorallocatealpha($blank_image, 0, 0, 0, 127));// 复制水印图片到空白图片上,并将其透明区域设为透明色imagecopy($blank_image, $watermark_image, 0, 0, 0, 0, $watermark_width, $watermark_height);imagecolortransparent($blank_image, imagecolorallocatealpha($blank_image, 0, 0, 0, 127));// 设置水印的透明度(取值范围:0-100)$alpha = 50;// 将水印复制到原始图片上,并设置透明度imagecopymerge($source_image, $blank_image, 0, 0, 0, 0, $watermark_width, $watermark_height, $alpha);// 输出添加水印后的图片header('Content-Type: image/jpeg');imagejpeg($source_image);// 释放内存imagedestroy($source_image);imagedestroy($watermark_image);imagedestroy($blank_image);

在上面的代码中,我们创建了一张与水印图片大小相同的空白图片,并将其透明区域设为透明色。然后,我们将水印图片复制到空白图片上,并将其透明区域设为透明色。最后,我们使用imagecopymerge()函数将空白图片作为水印复制到原始图片上,并根据需要设置透明度。

请注意,当处理png文件时,需要使用imagecolorallocatealpha()函数来分配透明颜色。此外,在使用imagecolortransparent()函数时,需要将透明颜色的alpha值设置为127,这是因为PNG格式支持8位透明度,取值范围为0-127。

相关文章
热门推荐