2011-12-11 32 views

Respuesta

0

Esto es muy tarde, pero, desde PHP.net:

Usando:

Imagick :: queryFontMetrics - Devuelve una matriz que representa las medidas de fuente

como esto:

// 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']; 
     }  
     } 

Dónde:

characterWidth y characterHeight - Estos parecen estar relacionados con el tamaño que ha especificado para la fuente y no parecen diferir de la fuente a la fuente (en el mismo tamaño). Como tales, no son especialmente útiles (para mí, al menos). No son un indicador confiable de cuánto espacio usará la fuente.

ascender - El ascendedor es la parte de la fuente que está por encima de la línea de base. No está relacionado con el carácter: el valor ascendente es el mismo para cada carácter en la fuente.

descensor - El descender es la parte de la fuente que está debajo de la línea base. Se representa como una figura negativa. La adición de los valores absolutos de la ascendente y el descendente le da la ...

textHeight - Esta es la altura total disponible para el tipo de letra. Es lo mismo para cada personaje de la fuente independientemente de su caso o de cuánto espacio parece ocupar el personaje. Esto se puede usar para determinar la línea de altura al imprimir párrafos, etc.

textWidth - Este valor varía de carácter a carácter y es el ancho del carácter. Esto es útil si boundingBox no proporciona valores utilizables (vea boundingBox a continuación). Cuando coloque caracteres uno en uno, no use textWidth, use originX (vea abajo).

maxHorizontalAdvance - Me temo que no he descubierto el propósito de esto. Es lo mismo para cada personaje en la fuente.Para la fuente Arial Cursiva en tamaño 67, el valor es 89, que es mucho más ancho que el informado por adelantado para la M o la W en el mismo tamaño.

boundingBox - Esto devuelve una matriz asociativa que describe los cuatro puntos (x1, y1, x2, y2) de un rectángulo que contiene el carácter. Estos valores son relativos al origen (es decir, las coordenadas de donde está dibujando el carácter dentro de una imagen). El rectángulo devuelto es muy preciso, y encierra completamente todas las partes del carácter impreso - , pero el cuadro delimitador solo funciona en caracteres individuales. No dará cifras precisas para múltiples caracteres (en mi experiencia de todos modos). Al dibujar un cuadro, debe AGREGAR valores "x" al origen y RESTAR valores "y" del origen. No puede confiar en boundingBox para el carácter SPACE. Devuelve un boundingBox de (0,0,0,0). textWidth (ver arriba) es útil aquí.

originX y originY - estos están incorrectamente titulados. Los valores devueltos en originX y originY son en realidad advanceX y advanceY. Estos valores le dan la posición del siguiente carácter relativo al actual.

Y después se puede generar la imagen con su texto como este:

// 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); 
Cuestiones relacionadas