iMagick:字体缩放不正确

时间:2019-04-26 10:38:14

标签: php imagick

我现在正在处理的脚本任务之一是精确的文本缩放:如果文本块的宽度大于x,则缩放fontSize以获得确切的x宽度。有时fontSize必须小于9px,因此imagick可以对小数进行运算,但请注意它存在问题。 例如。 7.6像素与7像素相同,因此脚本无法正确缩放,最终结果是文本文字过于狭窄。有什么方法可以使它更精确?还是不可能?

我制作了一个简单的演示,您可以在其中看到不同字体大小的输出(也包含分数值)。其中一些具有合适的尺寸,而其他一些则是相同的(并且它们不应该如此)。

Demo output image

    $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;

0 个答案:

没有答案