好的,我遇到一个问题,我的文本无法覆盖一张部分透明的图片。我希望文本是不透明的,但是图片的背景部分需要透明,而文本所在的部分需要完全不透明。目前的问题是文本继承了之前图层中的透明背景色。以下是代码、输出示例以及我希望得到的效果。图片放在浅灰色背景上,因此图片周围较深部分的浅色边框需要透明,但其他部分都不能透明,尤其是文本。看起来问题不在文本本身,而是文本块的背景色透明。这并不理想。请帮助我解决这个问题,这是我完成项目的唯一问题。:)
由于还不能发布图片,所以这里是示例输出和期望结果的图片链接(原图):
<?php
$img = imagecreatetruecolor(200, 50);
$imageX = imagesx($img);
$imageY = imagesy($img);
imagealphablending($img, false);
imagesavealpha($img, true);
$transparent = imagecolorallocatealpha($img, 255,255,255, 127);
$white = imagecolorallocate($img, 255,255,255);
$grey = imagecolorallocate($img, 127,127,127);
imagefilledrectangle($img, 0, 0, $imageX, $imageY, $grey);
imagefilledrectangle($img, 2, 2, $imageX-4, $imageY-4, $transparent);
$font = "./arialbd.ttf";
$fontSize = 12;
$text = "THIS IS A TEST";
$textDim = imagettfbbox($fontSize, 0, $font, $text);
$textX = $textDim[2] - $textDim[0];
$textY = $textDim[7] - $textDim[1];
$text_posX = ($imageX / 2) - ($textX / 2);
$text_posY = ($imageY / 2) - ($textY / 2);
imagefilledrectangle($img, 10, 10, $imageX-10, $imageY-10, $grey);
imagettftext($img, $fontSize, 0, $text_posX, $text_posY, $white, $font, $text);
header("Content-Type: image/png");
imagepng($img);
?>
imagecopyresampled()
调整大小之前必须将其关闭,并在使用imagettftext()
放置文本之前重新打开以保持背景透明并避免字符周围出现灰色菱形。 - vladkras