我现在正在处理的脚本任务之一是精确的文本缩放:如果文本块的宽度大于x,则缩放fontSize以获得确切的x宽度。有时fontSize必须小于9px,因此imagick可以对小数进行运算,但请注意它存在问题。 例如。 7.6像素与7像素相同,因此脚本无法正确缩放,最终结果是文本文字过于狭窄。有什么方法可以使它更精确?还是不可能?
我制作了一个简单的演示,您可以在其中看到不同字体大小的输出(也包含分数值)。其中一些具有合适的尺寸,而其他一些则是相同的(并且它们不应该如此)。
$font = "./COURIER.TTF";
$im = new Imagick();
$im->setCompressionQuality(100);
$im->newImage(900, 900, new ImagickPixel("white"));
$im->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor(new ImagickPixel("red"));
$draw->setFillColor(new ImagickPixel("transparent"));
$draw->setStrokeOpacity(1);
$draw->setStrokeWidth(1);
$draw->rectangle(10, 22, 860, 30);
$im->drawImage($draw);
$txt = new ImagickDraw();
$txt->setFont($font);
$txt->setFontSize(12);
$im->annotateImage($txt, 10, 30, 0, "Font size: 12");
$txt->setFontSize(11.7);
$im->annotateImage($txt, 120, 30, 0, "Font size: 11.7");
$txt->setFontSize(11.51);
$im->annotateImage($txt, 240, 30, 0, "Font size: 11.51");
$txt->setFontSize(11.45);
$im->annotateImage($txt, 370, 30, 0, "Font size: 11.45");
$txt->setFontSize(11);
$im->annotateImage($txt, 490, 30, 0, "Font size: 11");
$txt->setFontSize(10.4);
$im->annotateImage($txt, 590, 30, 0, "Font size: 10.4");
$txt->setFontSize(10);
$im->annotateImage($txt, 690, 30, 0, "Font size: 10");
$txt->setFontSize(9);
$im->annotateImage($txt, 790, 30, 0, "Font size: 9");
header('Content-type: image/png');
echo $im;