Frage

Ich habe ein Bild Platzhalter etwas sagen wie:

Your rating is:
   [rating here]

ist mein PHP-Code soll die Bewertungszahl dynamisch einzufügen, wo es ein leerer Raum für das es auf dem Platzhalter Bild ausgelassen ist. Wie kann ich das tun?

War es hilfreich?

Lösung

Hier ist ein ein Beispiel, wie Sie es tun könnten - verwenden gd Funktion ruft Ihr Bild zu machen, aber die Bilder spielen schön und zwischenzuspeichern. Diese Probe spielt noch schöner durch die Gewährleistung, wenn der Browser bereits das erforderliche Bild hat, es gibt eine 304 ...

#here's where we'll store the cached images
$cachedir=$_SERVER['DOCUMENT_ROOT'].'/imgcache/'

#get the score and sanitize it
$score=$_GET['score'];
if (preg_match('/^[0-9]\.[0-9]{1,2}$/', $score)
{
    #figure out filename of cached file
    $file=$cachedir.'score'.$score.'gif';   

    #regenerate cached image
    if (!file_exists($file))
    {
        #generate image - this is lifted straight from the php
        #manual, you'll need to work out how to make your
        #image, but this will get you started

        #load a background image
        $im     = imagecreatefrompng("images/button1.png");

        #allocate color for the text
        $orange = imagecolorallocate($im, 220, 210, 60);

        #attempt to centralise the text  
        $px     = (imagesx($im) - 7.5 * strlen($score)) / 2;
        imagestring($im, 3, $px, 9, $score, $orange);

        #save to cache
        imagegif($im, $file);
        imagedestroy($im);
    }

    #return image to browser, but return a 304 if they already have it
    $mtime=filemtime($file);

    $headers = apache_request_headers(); 
    if (isset($headers['If-Modified-Since']) && 
        (strtotime($headers['If-Modified-Since']) >= $mtime)) 
    {
        // Client's cache IS current, so we just respond '304 Not Modified'.
        header('Last-Modified: '.gmdate('D, d M Y H:i:s', $mtime).' GMT', true, 304);
        exit;
    }


    header('Content-Type:image/gif');
    header('Content-Length: '.filesize($file));
    header('Last-Modified: '.gmdate('D, d M Y H:i:s', $mtime).' GMT');
    readfile($file);


}
else
{
    header("HTTP/1.0 401 Invalid score requested");
}

Wenn Sie dies in image.php setzen, würden Sie verwenden, wie in einem Image-Tag folgt

<img src="image.php?score=5.5" alt="5.5" />

Andere Tipps

Verwenden Sie statische Bilder von 0 bis 9 reicht und sie nur auf der Seite kombinieren, um eine große Anzahl zu bauen:

Your Rating: [image1.jpg][image2.jpg][image3.jpg]

Ich weiß, das ist die Frage „Wie dynamisch ein Bild mit einer bestimmten Anzahl an es schaffen?“ aber ich werde das zugrunde liegende Problem stattdessen sprechen. Dynamische Bildmanipulation ist auf der CPU schwer. Nur tun Sie es nicht. Und sicherlich tut es nicht im Rahmen einer Web-Anfrage. Betrachten Sie mit statischen Bildern statt und zeigt dann die richtigen auf der Rating-abhängig. Selbst wenn Ihr Rating-System zu 100 der ganzen Weg geht, wäre es besser, 100 statische Bilder zu haben, als das gleiche Bild über zu halten neu gezeichnet und immer wieder.

Siehe auch Alpha-Blending Beispiel bei http://ca3.php.net/manual/en/function. imagecopymerge.php # 73477

Anstelle der Verwendung von Imagestring () mit eingebauten oder TTF-Schriften zu schreiben, Sie könnten Ihre eigenen 0-9 Zeichen als 24-Bit-PNG-Bilder erstellen mit Alpha-Blending, dann in mit ihnen zusammengesetzte imagecopymerge (). Es ist ein bisschen mehr Arbeit, aber würden Sie viel mehr Kontrolle über die Blick des Zeichensatzes.

Warum nicht die Zahl als Text in einem div eingestellt, dann Stil mit Schrift- und Hintergrund Auswahl?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top