2

PHPGDについて助けが必要です。これが私のコードです。

    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は、トゥルー(数百万)のカラー画像をサポートし、アルファチャネルの透明度をサポートします。つまり、ピクセルは100%不透明、100%透明、またはその間の任意のものにすることができます。

あなたが言及したPNG画像はおそらくそのエッジが部分的に透明であるため、ブラウザはそれらのピクセルを背景色と簡単にブレンドして滑らかな効果を与えることができます。PNGがより良い選択です。

于 2012-09-10T08:06:54.200 に答える
1

最初の問題:あなたのキャラクターは醜いです:それは、imagecreatetruecolorを使用するときに、より少ない色でパレットを設定する必要があるためです。

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

この問題を解決する必要があります。

2番目の問題:透明性がありません。

PHPマニュアルでわかるように、

imagesavealpha()は、PNG画像を保存するときに、(単色の透明度ではなく)完全なアルファチャネル情報の保存を試みるフラグを設定します。

この関数は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 に答える