Четверг, 26 августа 2021 18:57

Добавляем поддержку работы с шрифтами в PHP 7.4 на Astra Linux 2.21

Россия
Оцените материал
(0 голосов)

Если у вас возникла потребность в добавлении надписей на картинки в PHP вы довольно быстро обнаружите, что GD в PHP 7.4 не работает нативно со строками UTF-8.

Для работы с такими строками следует использовать imagettftext(). Эта функция по умолчанию отсутствует в PHP. Для её использования необходимо включить поддержку FreeType в GD.

Сегодня мы добавим в GD возможность работы со шрифтами FreeType.

Я подразумеваю, что при установке PHP 7.4 вы использовали предыдущую статью.

Установка пакетов

Для начала установим недостающие пакеты

sudo apt install libfreetype6-dev libfreetype6

Очистка

Перед сборкой обязательно производим очистку

sudo make clean

В противном случае GD может не собраться с FreeType.

Конфигурация

Исправим файл

configure.sh

Добавив в него опцию

    --with-freetype

В результате наш файл примет вид:

./configure --with-config-file-path=/etc/php/php7.4 \
    --sysconfdir=/etc/php/php7.4 \
    --enable-mysqlnd \
    --with-pdo-mysql \
    --with-pdo-mysql=mysqlnd \
    --with-pdo-pgsql=/usr/bin/pg_config \
    --enable-bcmath \
    --enable-fpm \
    --with-fpm-user=www-data \
    --with-fpm-group=www-data \
    --enable-mbstring \
    --enable-phpdbg \
    --enable-shmop \
    --enable-sockets \
    --enable-sysvmsg \
    --enable-sysvsem \
    --enable-sysvshm \
    --with-zlib \
    --with-curl \
    --with-pear \
    --with-openssl \
    --enable-pcntl \
    --enable-gd \
    --with-jpeg \
    --with-mysqli \
    --with-readline \
    --with-freetype

Запустим конфигурирование:

./configure.sh

Если конфигурирование не выявило ошибок, то мы получим сообщение:

+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE. By continuing this installation  |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+

Thank you for using PHP.

Запустим сборку и установку

sudo make install

Перезапустим Php-fpm

sudo systemctl restart php-7.4-fpm.service

Откроем нашу тестовую страницу:

http://192.168.1.42:9999/test.php

2021-08-26_18-39-40.png

Поддержка FreeType активирована

Тестируем поддержку FreeType в PHP 7.4

Давайте проверим работоспособность FreeType в PHP 7.4.

Создадим файл

testimage.php

с содержимым:

<?php

$img = imagecreatetruecolor(500, 300);

$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);

imagefilledrectangle($img, 0, 0, 500, 300, $white);

$font = "NotoSansCJK-Regular.ttc";

imagealphablending($img, true);

$text = "Тест: 日本語 金 水 木 火 土";

imagettftext($img, 22, 0, 0, 100, $black, $font, $text);

imagestring($img, 22, 0, 15,  "regular text", $black);

imagepng($img, "./image.png");

?>

<img src="/image.png">

Скачаем архив со шрифтом

https://noto-website-2.storage.googleapis.com/pkgs/NotoSerifCJK-Regular.ttc.zip

Распакуем и скопируем файл

NotoSansCJK-Regular.ttc

В папку с файлом

testimage.php

Откроем в браузере:

 http://192.168.1.42:9966/testimage.php

У нас получится:

2021-08-26_18-45-15.png

Таким образом мы можем выводить как русский текст, так и текст на любом другом языке!

Заключение

Сегодня мы пересобрали PHP 7.4 под Astra Linux 2.21 для работы с FreeType в GD.

Установили недостающие пакеты.

Очистили папку с исходным кодом.

Произвели конфигурирование PHP.

Собрали и установили новую версию PHP.

Написали тестовый скрипт использующий FreeType для вывода текста на картинке.

Прочитано 171 раз Последнее изменение Четверг, 26 августа 2021 19:14
Другие материалы в этой категории: « Отправка изображений с помощью Телеграм-бота