2

我需要一些关于 PHP GD 的帮助。这是我的一段代码。

    header("Content-type: image/gif");

    $image = imagecreatetruecolor(550, 20);
    imagealphablending($image, false);

    $col=imagecolorallocatealpha($image,255,255,255,127);
    $black = imagecolorallocate($image, 0, 0, 0);

    imagefilledrectangle($image,0,0,550,20,$col);
    imagealphablending($image, true);

    $font_path = 'font/arial.ttf';
    imagettftext($image, 9, 0, 16, 13, $black, $font_path, $lastlisten);
    imagesavealpha($image, true);

    imagepng($image);

问题是当我使用 imagepng 时,它可以像这样很好地显示 png。在此处输入图像描述

但如果我改用 imagegif,它就会变成这个。 在此处输入图像描述

我确实尝试过为 gif 和 png 使用不同的标题。imagegif 的结果仍然相同。问题是如何才能正确显示 GIF 版本?谢谢

4

2 回答 2

2

GIF 图像最多支持 256 种颜色。最重要的是,它只支持索引透明度:一个像素可以是 100% 不透明或 100% 透明。

另一方面,PNG 支持真实(数百万)彩色图像并支持 Alpha 通道透明度。这意味着一个像素可以是 100% 不透明、100% 透明或介于两者之间的。

您提到的 PNG 图像可能具有部分透明的边缘,因此浏览器可以轻松地将这些像素与背景颜色混合,从而产生平滑的效果。PNG是一个更好的选择。

于 2012-09-10T08:06:54.200 回答
1

第一个问题:你的角色很丑:那是因为你在使用 imagecreatetruecolor 时需要设置一个颜色较少的调色板。

$image = imagecreatetruecolor(550, 20);
imagetruecolortopalette($image, true, 256);

应该解决这个问题。

第二个问题:没有透明度。

正如您在PHP 手册中看到的那样,

imagesavealpha() 设置标志以在保存 PNG 图像时尝试保存完整的 alpha 通道信息(与单色透明度相反)。

此功能不适用于 GIF 文件。

您可以改用imagecolortransparent,但这并不完美,因为字体具有抗锯齿功能以使其边框更甜美。

这是我的代码:

<?php

$lastlisten = "test test test test test test";

error_reporting(E_ALL);
header("Content-type: image/gif");

$image = imagecreatetruecolor(550, 20);
imagetruecolortopalette($image, true, 256);

$transparent=imagecolorallocatealpha($image,255,255,255,127);
imagecolortransparent( $image, $transparent);
imagefilledrectangle($image,0,0,550,20,$transparent);

$black = imagecolorallocate($image, 0, 0, 0);
$font_path = dirname(__FILE__) . '/font.ttf';
imagettftext($image, 9, 0, 16, 13, $black, $font_path, $lastlisten);

imagegif($image);

结果在这里

希望这可以帮助。

于 2012-09-10T08:01:31.293 回答