Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268

    Determinare la lunghezza in pixel di un testo

    esiste una funzione o un modulo che avendo come dati:
    - il tipo di testo utilizzato,
    - la dimesnione (size),
    - ed il testo
    mi restituisce la lunghezza in pixel del testo?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Lato server non e` possibile determinarlo.
    In particolare non hai controllo sulle dimensioni della finestra e neppure sulle dimensioni del font.

    Lato client e` possibile fare qualcosa in JS, dopo che il blocco e` stato visualizzato nel browser (eventualemnte anche in un blocco nascosto, se questo e` coperto da un altro blocco).

    Ma tornando alla domanda: a che ti serve?
    Non e` meglio lasciar fare al browser, ed usare i CSS in modo intelligente?
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    ok: sto generando con perl il disegno di un pezzo meccanico in SVG.
    Le misure del pezzo meccanico variano, e io devo inserire le quote.
    So qual'è il testo che devo scrivere (non lo ricevo da form).
    Il problema sta nel fatto che per inserire un testo in SVG devo dare come quota la X e la Y del punto in basso a sinistra.
    Vorrei centrare la scritta, quindi se sapessi qual'è la lunghezza del testo in pixel potrei farlo.
    Al momento sto risolvendo il problema utilizzando il courier (le lettere hanno la stessa larghezza), ma mi piacerebbe trovare una soluzione alternativa differente per esempio da quella di creare un array con la larghezza delle lettere (sulla base del font utilizzato) che ho trovato in javascript (gestibile fra l'altro anche in perl)

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Cioe` stai dicendo che vuoi realizzare un disegno in SVG e scriverci sopra (o vicino) delle scritte in HTML?
    Mi sembra demenziale.
    Fai tutto in SVG! E allora SVG gestisce tutto, compreso la misura dei caratteri.

    Ma allora il posto in cui chiedere e` il forum di Flash (o altro sw che gestisce il SVG).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    il mio disegno meccanico cambia dimensioni sulla base di una elaborazione perl (il cliente imposta dei dati, perl li elabora e genera il disegno con le quote).
    Le scritte che inserisco nel disegno SVG sono di tipo SVG e vengono impostate da perl.
    SVG gestisce la posizione di una scritta indicando l'angolo estremo sinistro.
    Se esistesse un modulo perl o una funzione perl (cosa che ora non credo) in grado di calcolare la larghezza della scritta, sempre tramite perl potrei centrare la quota rispetto ad un punto).
    Ribadisco, ora già lo sto facendo ma uso il carattere courier in quanto le lettere sono della stessa larghezza:

    my $pixel_singolo_carattere=8; #8 se font-size=12
    my $scritta;
    my $nr_caratteri=length $scritta;

    my $larghezza_in_pixel=$nr_caratteri*$pixel_singolo_c arattere;

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Per fare una funzione in Perl che calcoli la larghezza di una scritta in base al font usato e conoscendo le larghezze dei singoli caratteri, non e` una cosa troppo complessa: ti basta avere un database delle varie larghezze dei caratteri e moltiplicarla per un fattore che dipende sia dal font che dalla dimensione.

    Il database e il (o i) fattori di scala non dipendono da Perl, ma dallo strumento con cui esegui la visualizzazione.
    Puoi avere due casi:
    - il SVG ha una funzione che ritorna la dimensione (e allora devi solo fare la query al SVG)
    - il SVG non ha tale funzione, e quindi devi copiarti il database e i fattori (dovresti trovare info nelle specifiche del SVG).

    Gli esperti di SVG potrebbero conoscere qualcosa: sicuramente non lo sanno gli esperti di Perl.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    Se si dispone del file NOME_FONT.afm (per chi usa php nelle librerie ce ne sono già molti) del font è possibile usare il seguente modulo già presente nella libreria standard:

    use Font::AFM;
    $h = new Font::AFM "Helvetica";
    $testo="MARTEDI";
    $w = $h->stringwidth("MARTEDI", 14); #14 rappresenta l'altezza in pixel (font-size)
    print "$w\n"; #$w è la larghezza

    nella stessa cartella che contiene questo file ho messo helvetica.afm
    Il risultato è ottimo e può servire anche per altre applicazioni grafiche.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    .afm sono file di Adobe che gestiscono la metrica dei font (sono quindi dei piccoli database testuali, quelli appunto indicati da Mich)

    Java e C# hanno qualche proprietà in più tramite la gestione delle API (solo per ambienti Windows).

    Queste funzioni possono essere richiamate anche dal modulo Perl Win32::GUI
    es:

    use Win32::GUI;
    $testo="parola";
    ($w, $h) = new Win32::GUI::GetTextExtentPoint32([FONT], $testo);

    la larghezza che da come risultato è la stessa che darebbe su una interfaccia GUI.
    (A dire il vero non ha funzionato molto bene!)
    In ogni caso che si utilizzi una GUI particolare o un programma grafico, i pixel rimangono sempre tali.
    Ho escluso questa soluzione poichè funziona solo su ambiente windows ed è più complicato gestire l'impostazione del font (font-size)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.