其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

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

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