Products
GG网络技术分享 2025-03-18 16:17 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。
Demand feedback