1

我正在使用自己的签名生成器。如何在不修改标题的情况下显示即时生成的图像?我需要知道它,因为我的网站(基于 WordPress)已经发送了标题,我无法修改它。当然我可以修改主题,但我只是从 PHP 开始。如果我修改标题一切正常(几乎工作脚本),但是当我想在WordPress中打开它时,不会生成图像。我还有第二个问题:如何添加到我生成的任何扩展中以在任何论坛上显示它(这是示例) - 在这种情况下: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。

请注意,您的图像脚本会产生某种负载,因此除非图像必须是超级动态的,否则请考虑将图像存储在永久位置,并在以后的任何请求时简单地读取此文件。

这个规则只有一个例外:如果你使用“data:”伪协议,那么你可以直接将图像数据包含在这个伪协议中,只有这样你才能将图像数据包含在HTML。考虑到由于图像数据必须与通常的 URL 约定兼容,因此必须进行 base64 编码,这显着增加了传输的数据量。此外,此类 URL 不能在浏览器中缓存,因为它们必须完全存在于每个图像标签中,以防浏览器还没有缓存条目。

所以基本上,除了需要浏览器的支持之外,数据 url 应该只用于非常小的图像,比如著名的“透明 gif 像素”,因为为导致 43 字节图像数据的单独图像请求添加 HTTP 开销是巨大的这种情况(每个请求大约 1 kb)。

于 2012-10-09T20:27:45.417 回答