Imagemagick - не знаю, как решить - PullRequest
0 голосов
/ 07 февраля 2019

У меня проблема с Imagemagick - постоянное расстояние и размер шрифта зависят от длины строки.Форма:

 <form action="text.php" method="post">

  <div class="container">
    <label for="uname"><b>Tekst1</b></label>
    <textarea id="confirmationText" class="text" name="primarytext"></textarea>
<br /> <br />
    <label for="psw"><b>Tekst2</b></label>
        <textarea id="confirmationText" class="text" name="secondarytext"></textarea>
<br /><br />
    <button type="submit">Login</button>
  </div>
</form> 

Код PHP:

<?php

// Variables
$text2 = $_POST['secondarytext'];
$text = $_POST['primarytext'];

// Primary image
$image = new Imagick();
$image->newImage(970, 946, new ImagickPixel('white'));
$image->setImageFormat('png');

// First parameters for text
if(isset($text)){
$len = mb_strlen($text);
$draw = new ImagickDraw();
$draw->setGravity(Imagick::GRAVITY_CENTER);
$draw->setFont('Bookman-DemiItalic');
if ($len < 10){ 
    $fontSized = 70 - (2*$len + 5);  
} elseif($len >= 10 && $len < 50){ 
    $fontSized = 55 - ($len + 4);
} else { 
    $fontSized = 100 - $len; 
}
$fontSized = max($fontSized, 1);
$draw->setFontSize($fontSized);
$draw->setTextAlignment(\Imagick::ALIGN_CENTER);
$image->annotateImage($draw, 485, 473, 0, $text);
}


// Second parameters for text
if(isset($text2)){
$len2 = mb_strlen($text2);
$draw2 = new ImagickDraw();
$draw2->setGravity(Imagick::GRAVITY_CENTER);
$draw2->setFont('Bookman-DemiItalic');
if ($len2 < 10){ 
    $fontSized2 = 50 - (2*$len2 + 5);  
} elseif($len2 >= 10 && $len2 < 50){ 
    $fontSized2 = 40 - ($len2 + 4);
} else { 
    $fontSized2 = 60 - ($len2 - 2); 
}
$fontSized2 = max($fontSized2, 3);
$draw2->setFontSize($fontSized2);
$draw2->setTextAlignment(\Imagick::ALIGN_CENTER);
$image->annotateImage($draw2, 485, 270, 180, $text2);
$image->annotateImage($draw2, 485, 676, 0, $text2);
}

//Print image on browser
header('Content-type: image/png');

//Save final image
//$image->writeImages($image, true);

//Show image
echo $image;

Я вставлю изображение, что не так с моим генератором и что должно быть.Теперь размер шрифта зависит от strlen, но у меня есть textarea, поэтому текст может быть многострочным, поэтому размер шрифта устанавливается всеми переменными strlen, я пробовал с самой длинной строкой, но это также не работает - например:

STACK

Размер шрифта был слишком большим, потому что самая длинная строка - всего одна цифра.Я попытался сделать tftboximage, но функция была неправильной (функция создала изображение, зависящее от размера всех букв - без лишней границы).

myversion

targetversion

Целевая версия выглядит как имеющая автоматическое изменение размера (размер текста не превышает 350x210 пикселей по центру и 190x110 пикселей по верхнему / нижнему тексту)

1 Ответ

0 голосов
/ 12 февраля 2019

Вы на два символа выше, потому что вы не правильно рассчитываете базовую линию.Метод annotateImage перемещает базовую линию первой строки в заданную координату Y.Однако в случае поворота на 180 градусов базовая линия остается в том же положении относительно исходного текста, а не поверх перевернутого текста.

enter image description here

...