1

私は自分の署名ジェネレーターで働いています。ヘッダーを変更せずにその場で生成された画像を表示するには? 私のサイト (WordPress に基づく) は既にヘッダーを送信しており、変更できないため、それを知る必要があります。もちろん、テーマを変更することはできますが、私は PHP を始めたばかりです。ヘッダーを変更すると、すべてが機能します(ほとんど機能するスクリプト)が、 WordPressで開きたい場合、画像が生成されません。2 番目の質問もあります。生成された任意の拡張機能に追加して、任意のフォーラムに表示する方法 (これは例です) - この場合: png? 生成された画像を保存したくありませんが、必要な場合は保存後に画像を削除する必要があります。

<?php
if( ! empty($_GET['nick']) ){
    //default
    $nick = $_GET['nick'];
    if(empty($_GET['server']))
        $server = 'eu';
        else $server = $_GET['server'];
    if(empty($_GET['font']))
        $font = 'calibri';
        else $font = $_GET['font'];
    //generacja
    $szerokosc = 350;
    $wysokosc = 19;
    $rozmiar = 13;
    $ob = imagecreatetruecolor($szerokosc, $wysokosc);
    $czarny = imagecolorallocate($ob, 0, 0, 0);
    $bialy = imagecolorallocate($ob, 255, 255, 255);
    putenv('GDFONTPATH=/home/p221366/public_html/snippets/fonts');
    imagettftext($ob, $rozmiar, 0, ($szerokosc/2), (($wysokosc-$rozmiar)/2)+$rozmiar, $bialy, $font, $nick.' '.$server);
    Header('Content-type: image/png'); 
    imagepng($ob/*, $local*/);
    imagedestroy($ob);
} else {//bez arg
    if ( isset($_GET['nick']) )
        echo '<p color=#ff0000>Invalid nickname!</p>';
    echo '<form method=get>
        <table align="center" border=0>
            <tr>
                <td bgcolor=#aaaaaa align="right">Nick</td>
                <td bgcolor=#cccccc align="center"><input type="text" name="nick" size="15" /></td>
            </tr>
            <tr>
                <td bgcolor=#aaaaaa align="right">Server</td>
                <td bgcolor=#cccccc align="center">
                    <select name="server">
                        <option value="eu">European</option>
                        <option value="ru">Russian</option>
                        <option value="com">American</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td bgcolor=#aaaaaa align="right">Font</td>
                <td bgcolor=#cccccc align="center">
                    <select name="font">
                        <option value="arial">Arial</option>
                        <option value="calibri">Calibri</option>
                        <option value="consola">Consolas</option>
                        <option value="courier">Courier New</option>
                        <option value="segoe">Segoe Script</option>
                        <option value="verdana">Verdana</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input type="submit" value="Submit" /></td>
            </tr>
        </table>
    </form>';
}

?>

4

1 に答える 1

0

画像は、HTML ページからの別のリクエストでリクエストされます。その場で画像を作成したい場合、HTML ページ自体を送信するのと同じリクエストでそれらをブラウザに送信することはできません。画像を生成するスクリプトへの URL を含む適切なタグを生成する必要があります。

イメージ スクリプトはある種の負荷を生成することに注意してください。そのため、イメージが非常に動的でなければならない場合を除き、イメージを永続的な場所に保存することを検討し、後で要求があったときにこのファイルを読み取るだけにしてください。

この規則には 1 つだけ例外があります。「data:」疑似プロトコルを使用する場合、この疑似プロトコル内に画像データを直接含めることができます。 HTML。画像データは通常の URL 規則と互換性がある必要があるため、base64 でエンコードする必要があるため、転送されるデータ量が大幅に増加します。また、このような URL はブラウザ内にキャッシュできません。これは、ブラウザがまだキャッシュ エントリを持っていない場合に備えて、すべてのイメージ タグに完全に存在する必要があるためです。

したがって、基本的に、データ URL は、ブラウザーからのサポートを必要とするだけでなく、有名な「透過 gif ピクセル」のような非常に小さな画像にのみ使用する必要があります。この場合 (リクエストごとに約 1 kb)。

于 2012-10-09T20:27:45.417 に答える