Visualizzazione risultati 1 fino 2 di 2

Discussione: [SCRIPT PHP/GD] scritta al centro

  1. #1
    Guest

    Question [SCRIPT PHP/GD] scritta al centro

    Ciau , ho fatto questo piccolo script , cercando di impostare come mettere le immagini al centro misurando la lunghezza dell'immagine :
    Codice PHP:
    <?php
    Header
    ("Content-Type: image/png");
    $testo = "Topo Gigio" ;
    $testo = strtoupper($testo);
    $immagine = imagecreatefrompng("firma.png");
    $nero = imagecolorallocate($immagine,0,0,0);
    $bianco = imagecolorallocate($immagine, 255,255,255);
    $arancio = imagecolorallocate($immagine,252,60,2);
    $verdefluo = imagecolorallocate($immagine,0,255,0);
    $rosso = imagecolorallocate($immagine,255,0,0);
    $width = ImageFontWidth(30) * strlen($testo);
    $x = (234 - $width)/2;

    imagettftext($immagine,30,0,$x,50,$nero,"bible_scrt.ttf","$testo");

    imagepng($immagine);
    imagedestroy($immagine);
    ?>
    Purtroppo non me lo mette al centro (la mia immagine è larga 234 px come impostato) , in locale non da errori , qualcuno sa aiutarmi ???

  2. #2
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Beh certo che hai problemi,
    ma mi stupisco fortemente che ti funzioni in locale!!!

    Stai usando da una parte un font TrueType e invece dall'altra vorresti calcolarne la larghezza usando una funzione che serve per i font standard (quelli orrendi in bitmap).

    Dovresti sostotuire la funzione ImageFontWidth (che appunto non c'azzecca) con imagettfbbox, ad es:
    $bbox = imagettfbbox ($size, $angle, $font, $text);

    visto che i TrueType sono molto avanzati come concetto di "scritta" una funzione che restituisca la larghezza in pixel è troppo POCO, quindi questa ti restituisce un BOX intero, visto che addirittura la scritta potrebbe essere angolata di tot gradi!
    Per info leggi il manuale come per qualsiasi altra cosa:
    http://it.php.net/manual/it/function.imagettfbbox.php

    Edit:
    piccolo aiutino, visto che non è la funzione più chiara del mondo ehehe
    nel tuo caso invece di ricavarti la x in quel modo (tipico di altri linguaggi cmq) con questa funzione hai DIRETTAMENTE la x (SBAGLIATO), leggendo il PRIMO (indice 0) valore dell'array che ti ritorna imagettfbbox,
    in questo modo:
    Codice PHP:
    $bbox = imagettfbbox ($size, $angle, $font, $text);
    $x = $bbox[0];
    RIEDIT (ignora qui sopra):
    Visto che qui sopra (testo rosso) ho sparato una minkiata stellare , ti correggo direttamente tutto il codice:
    Codice PHP:
    <?php
    Header
    ("Content-Type: image/png");
    $testo = "Topo Gigio" ;
    $testo = strtoupper($testo);
    $immagine = imagecreatefrompng("firma.png");
    $nero = imagecolorallocate($immagine,0,0,0);
    $bianco = imagecolorallocate($immagine, 255,255,255);
    $arancio = imagecolorallocate($immagine,252,60,2);
    $verdefluo = imagecolorallocate($immagine,0,255,0);
    $rosso = imagecolorallocate($immagine,255,0,0);

    $font = 'bible_scrt.ttf';
    $fsize = 30;
    $bbox = imagettfbbox ($fsize, 0, $font, $testo);
    $width = $bbox[2] - $bbox[0];
    $x = (234 - $width)/2;

    imagettftext($immagine, $fsize, 0, $x, 50, $nero, $font, $testo);

    imagepng($immagine);
    imagedestroy($immagine);
    ?>
    Ora dovrebbe essere giusto, fammi sapere
    Ultima modifica di heracleum : 04-12-2005 alle ore 22.33.20
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •