Come ottenere larghezza/altezza del testo scritto in Imagemagick?Come ottenere larghezza/altezza del testo
convert -font 'tahoma.ttf' -draw "text 10,10 'the text'" img.png
Come ottenere larghezza/altezza del testo scritto in Imagemagick?Come ottenere larghezza/altezza del testo
convert -font 'tahoma.ttf' -draw "text 10,10 'the text'" img.png
possiamo usare la funzione queryFontMetrics di imagick. vedere questo link (http://php.net/manual/en/imagick.queryfontmetrics.php)
risposta di verifica di questa funzione otterrete larghezza e altezza.
un'occhiata a questa pagina: http://www.imagemagick.org/ImageMagick-7.0.0/script/conjure.php (3 ° esempio)
Il Conjure binario consente di eseguire gli script basato su XML scritti in Magick Scripting Language (MSL). Questi possono utilizzare il comando "query-font-metrics" dei messaggi IM, che non sembra essere disponibile dagli altri binari.
questo è davvero in ritardo, ma, da PHP.net:
Usando:
Imagick :: queryFontMetrics - Restituisce una matrice che rappresenta le metriche di carattere
come questo:
// Set font.
$font = PATH/TO/YOUR/CUSTOM/FONT
// Get dimensions.
// Create a new Imagick object.
$imTest = new Imagick();
// Create an ImagickDraw object.
$drawTest = new ImagickDraw();
// Set the font.
$drawTest->setFont($font);
// Set the local X and Y.
$localX = 0;
$localY = 0;
// Dump the font metrics, autodetect multiline
for ($i = 0; $i < strlen($yourText); $i++) {
if ($yourText[$i] === ' ') {
$tempX += $imTest->queryFontMetrics($drawTest, $yourText[$i])['textWidth'];
} else {
$tempX += $imTest->queryFontMetrics($drawTest, $yourText[$i])['originX'] + $imTest->queryFontMetrics($drawTest, $yourText[$i])['boundingBox']['x2'] + $imTest->queryFontMetrics($drawTest, $yourText[$i])['boundingBox']['x1'];
}
}
Dove:
characterWidth and characterHeight - Questi sembrano essere correlati alla dimensione specificata per il carattere e non sembrano differire da font a font (alla stessa dimensione). Come tali, non sono particolarmente utili (per me, almeno). Non sono un indicatore affidabile di quanto spazio il font utilizzerà.
ascender - L'ascender è la parte del carattere che si trova sopra la linea di base. Non è correlato al carattere - il valore di ascender è lo stesso per ogni carattere nel carattere.
discensore - Il discensore è la parte del carattere che si trova sotto la linea di base. È rappresentato come una cifra negativa. Aggiungendo i valori assoluti del montante e il discensore ti dà il ...
textHeight - Questa è l'altezza totale disponibile per il carattere. È uguale per ogni carattere nel carattere indipendentemente dal suo caso o da quanto spazio occupa il personaggio . Può essere utilizzato per determinare l'altezza della linea durante l'emissione di paragrafi, ecc.
textWidth - Questo valore varia da carattere a carattere e corrisponde alla larghezza del carattere. Questo è utile se boundingBox non fornisce valori utilizzabili (vedere boundingBox sotto). Quando si posizionano i caratteri uno da - non utilizzare textWidth, utilizzare OriginX (vedere di seguito).
maxHorizontalInvance - Ho paura di non aver capito lo scopo di questo. È lo stesso per ogni carattere nel carattere.Per il carattere Arial Italic a taglia 67, il valore è 89 che è molto più largo dell'anticipo riportato per M o W alle stesse dimensioni.
boundingBox - Restituisce un array associativo che descrive i quattro punti (x1, y1, x2, y2) di un rettangolo che contiene il carattere. Questi valori sono relativi all'origine (ovvero le coordinate di dove si è che traccia il carattere all'interno di un'immagine). Il rettangolo restituito è molto preciso e racchiude completamente tutte le parti del carattere stampato - ma il boundingBox funziona solo su singoli caratteri. Non fornirà cifre esatte di per più personaggi (nella mia esperienza comunque). Quando si disegna una scatola è necessario AGGIUNGERE valori "x" all'origine e SOTTRAI valori "y" dall'origine. Non puoi fare affidamento sul boundingBox per il carattere SPACE. Restituisce un boundingBox di (0,0,0,0). textWidth (vedi sopra) è utile qui.
origineX e origineY- questi sono erroneamente denominati. I valori restituiti in origineX e originY sono in realtà advanceX e advanceY. Questi valori forniscono la posizione del carattere successivo rispetto a quella corrente.
E poi si può generare l'immagine con il vostro testo come questo:
// Generate image.
$cmd = 'convert -size ' . $localX . 'x' . $maxY . ' xc:none -gravity Center -font ' . $font . ' -pointsize ' . $fontSize . ' -annotate +0+0 "' . $yourText . '" ' . FINAL/PATH/TO/YOUR/FILE.png';
$r = shell_exec($cmd);