PHP imagettftext()字体字母不透明

时间:2015-12-28 21:22:56

标签: php php-gd imagettftext

我正在使用PHP GD库,允许用户在我提供的背景图像上生成他们的名字。目前的问题是输出的PNG中的字母不透明 - 正如您在下面看到的那样,它们相互重叠。

文字:罗杰阿贾克斯

背景图片:

Background Image

结果:

Non Transparent Letters

这可能是由于TTF字体造成的吗?我尝试了以下相同结果的字体:

- HomemadeApple.ttf
- IndieFlower.ttf 
- DancingScript.ttf 
- KaushanScript Regular.ttf
- PermanentMarker.ttf

以下是我的功能的完整来源:

    $signature_text = "Roger Ajax";
    $font_name = "Homemade Apple";

    // Lowercase all letters then capitalize First Lettter of each word
    $signature_text = strtolower($signature_text);
    $signature_text = ucwords($signature_text);

    // Font & Text Settings
    $font_size = 32;
    $font = "/var/gosigner/fonts/HomemadeApple.ttf";
    $desired_width = strlen($signature_text) * 34;
    $start_position = 32;

    // Background Image
    $originalImage = $this->config->item('app_root') . "img/signature_field_blank.png";

    // Verify BG Image can be found
    if(!file_exists($originalImage)) {
        $this->shared->throw_error("Signature template file could not be found");
    }

    $im = imagecreatefrompng($originalImage); // Get original
    imagealphablending($im, false);           // Save Transparency
    imagesavealpha($im, true);                // Save Transparencyc

    $img_resized = imagecreatetruecolor($desired_width, 72);   // Create new PNG
    imagealphablending($img_resized, false);                   // Save Transparency
    imagesavealpha($img_resized, true);    

    $trans_colour = imagecolorallocatealpha($img_resized, 0, 0, 0, 127);
    imagefill($img_resized, 0, 0, $trans_colour);


    $x = imagesx($im); // Original X
    $y = imagesy($im); // Original Y
    imagecopyresampled($img_resized, $im, 0, 0, 0, 0, 214, 72, $x, $y);
    $black = imagecolorallocate($im, 0, 0, 0);
    imagettftext($img_resized, $font_size, 0, $start_position, 45, $black, $font, $signature_text);

    header('Content-Type: image/png');
    imagepng($img_resized);
    imagedestroy($im);
    imagedestroy($img_resized);

1 个答案:

答案 0 :(得分:1)

我将文字添加到$ img_resized(这里我使用不同的字体和颜色)

Roger Ajax

$img_resized = imagecreatetruecolor($desired_width, 72);
imagesavealpha($img_resized, true);
imagefill($img_resized, 0, 0, IMG_COLOR_TRANSPARENT);
$black = imagecolorallocate($img_resized, 0, 0, 0);
imagefttext($img_resized, $font_size, 0, $start_position, 45, $black, $font, $signature_text);

将它放在$ im。

之上
imagecopyresampled($img_resized, $im, 0, 0, 0, 0, 214, 72, $x, $y);

(另外我没有使用imagealphablending()部分并使用IMG_COLOR_TRANSPARENT而不是$ trans_colour)