2016-03-03 47 views
1

我想创建一个仅包含1行文本的简单图像。与此相似:如何在IMagick Canvas中使用PHP字体大小?

http://www.imagemagick.org/Usage/text/#label

不过,我想保持它PHP的Imagick内。我知道字体大小,并且我希望画布大小适合字体大小,就像它在示例中一样。不幸的是,我没有看到用PHP中的Imagick做到这一点。我为PHP找到的所有示例都要求我先定义画布大小。

帮助!

+0

使用了非常大的画一个然后使用trimImage() - 示例是:http://phpimagick.com/Tutorial/imageGeometryReset的一部分 - 但是,queryFontMetrics也是一个不错的选择。 – Danack

回答

1

你可以做这样的事情,通过查询字体规格,但也有可能是一个更好的办法,我不知道....

#!/usr/local/bin/php -f 
<?php 
    $image = new Imagick(); 
    $draw = new ImagickDraw(); 
    $draw->setFillColor('black'); 
    $draw->setStrokeAntialias(true); 
    $draw->setTextAntialias(true); 
    $draw->setFontSize(24); 
    $text="Hello, I am a lovely label"; 
    // Set typeface 
    $draw->setFont('Impact'); 
    // Calculate size 
    $metrics = $image->queryFontMetrics($draw,$text,FALSE); 
    $w=$metrics['textWidth']; 
    $h=$metrics['textHeight']; 
    $y=$metrics['ascender']; 
    $image->newImage($w,$h,"steelblue","png"); 
    $image->annotateImage($draw,0,$y,0,$text); 
    $image->writeImage("result.png"); 
?> 

enter image description here