Размер watermark imagine

98
30 ноября 2020, 16:10

Мне на картинку необходимо вставить текстовый watermark использую следующий код:

Image::text(
            $image,
            $word,
            Yii::getAlias('@webroot/fonts/fira_sans/FiraSans-Book.otf'),
            $start,
            $fontOptions
        )->save(Yii::getAlias('@webroot/images/certificates/'.$name.'.jpg'), ['quality' => 100]);

Проблема в том что количество символов в watermark всегда разное, а мне надпись нужно сделать четко по центру. Как это сделать?

Answer 1

Если не ошибаюсь, Yii'шный Image так не умеет, но он может вернуть Imagine (getImagine). Ну а дальше по доке: Image::getImagine()->getClassFactory()->createFont(...)->box('text') -- так вы узнаете размер бокса с текстом. Ну и останется посчитать позицию с которой нарисовать текст (середина картинки минус половина размера бокса текста).

UPD

В yii используется более старая версия Imagine, поэтому код будет немного другой:

$palette = new \Imagine\Image\Palette\RGB();
$fontBox = Image::getImagine()
    ->font('fontfile.ttf', 10, $palette->color('#ff0000'))
    ->box('foo bar');
var_dump($fontBox->getWidth(), $fontBox->getHeight());die;
READ ALSO
Как определить создателя беседы через VK API?

Как определить создателя беседы через VK API?

В ВК с помощью метода messagesgetConversationMembers можно получить список участников беседы и их статус в беседе в виде JSON

138
Apache запретить доступ к файлам, Laravel

Apache запретить доступ к файлам, Laravel

Всем приветПо пути storage/5/sas24s15

96
Проблема кодировки строки

Проблема кодировки строки

Как превратить такую строку в читабельную?

104
Как сравнить текущее время с заданным php?

Как сравнить текущее время с заданным php?

Написал следующий код, но - пустота

177