在php中从头开始创建带有文本的透明png

Posted

技术标签:

【中文标题】在php中从头开始创建带有文本的透明png【英文标题】:Create transparent png with text from scratch in php 【发布时间】:2011-12-14 10:39:09 【问题描述】:

我在网上找到的所有示例似乎都是使用现有 png 中的文本创建 png。是否可以从头创建一个透明的png,然后添加文本?​​

我到目前为止得到的代码如下(但它不起作用。只是输出一个空白图像源)

<?php
    $width = 150;
    $height = 30;
    $text = "My Text";
    $fontsize = 5;

    $im = imagecreate($width, $height);
    $transcolor = imagecolortransparent($im);

    imagestring($im, $fontsize, 0, 0, $text, $transcolor);

    header('Content-type: image/png');
    imagepng($im);
    imagedestroy($im);
?>

【问题讨论】:

***.com/questions/6109832/… 【参考方案1】:
<?php
    $font = 25;
    $string = 'My Text';
    $im = @imagecreatetruecolor(strlen($string) * $font / 1.5, $font);
    imagesavealpha($im, true);
    imagealphablending($im, false);
    $white = imagecolorallocatealpha($im, 255, 255, 255, 127);
    imagefill($im, 0, 0, $white);
    $lime = imagecolorallocate($im, 204, 255, 51);
    imagettftext($im, $font, 0, 0, $font - 3, $lime, "droid_mono.ttf", $string);
    header("Content-type: image/png");
    imagepng($im);
    imagedestroy($im);
?>

如果您不想要自定义字体,请使用 imagestring 而不是 imagettftext

【讨论】:

【参考方案2】:

这是基于您的原始代码的解决方案。

<?php
    $width = 640;
    $height = 480;
    $text = "My Text";
    $fontsize = 5;

    $img = imagecreate($width, $height);

    // Transparent background
    $black = imagecolorallocate($img, 0, 0, 0);
    imagecolortransparent($img, $black);

    // Red text
    $red = imagecolorallocate($img, 255, 0, 0);
    imagestring($img, $fontsize, 0, 0, $text, $red);

    header('Content-type: image/png');
    imagepng($img);
    imagedestroy($img);
?>

【讨论】:

【参考方案3】:

我认为GD 是最流行的生成图像之一,imagettftext。

 <?php
    $text = 'SOME TEXT';

    $font="c:/windows/Fonts/Latinwd.ttf"; //Load font file for windows

    $im = ImageCreate(700, 140);

    $bla = imagecolorallocate($im, 0, 0, 0);
    imagecolortransparent($im, $bla); //transparent background

    $black = imagecolorallocate($im, 255,255,255);
    ImageTTFText ($im, 38, 0, 10, 40, $black, $font, $text);

    header('Content-Type: image/png');
    ImagePNG($im, 'name.png');
    imagedestroy($im);
    ?>

【讨论】:

以上是关于在php中从头开始创建带有文本的透明png的主要内容,如果未能解决你的问题,请参考以下文章

透明叠加创建PNG

将文本创建为位图的工具(消除锯齿文本、自定义间距、透明背景)

带有透明PNG的imagetruecolortopalette的PHP错误结果

R/ggplot2:添加带有透明度信息的 png

PHP:将透明 PNG 添加到具有不透明度的 JPEG

如何在带有文本的图像上方创建透明的深色叠加层?