Как сделать скругление углов изображения с обводкой в библиотеке TCPDF (PHP), аналог border-radius

17.09.2023

Border-raduis for image in TCPDF (PHP)

В своё время долго провозился с данной задачей, поэтому решил выложить, вдруг кому-то сократит время поиска.

Задача была вывести изображение с скругленными углами и рамкой вокруг в документе формируемом TCPDF на PHP, т.е. аналог border-raduis из CSS.

Как я не пытался вставлять HTML-код со стилями border-raduis в создаваемый PDF, у меня ничего не работало, хотя примеры на стековерфлоу с подобным решениями были.

Я уже было отчаялся и думал что придется использовать 2 изображения с наложением, одно снизу - оригинальное, второе в формате PNG над ним с краями и прозначным прямоугольником со скругленными краями внутри (как тут). Что напоминало старый-старый веб.

Но через несколько часов поисков и мучений удалось найти более верное решение проблемы, где через StartTransform мы сначала делаем закругление углов, потом вставляем изображение, а потом делаем саму рамку, решение ниже.

// Стили рамки
$imgBorderStyle = ['width' => 1,'cap' => 'square','join' => 'miter','dash' => '0','color' => [150, 150, 150]];

$imgX = 10;
$imgY = 10;
$imgWidth = 50;
$imgHeght = 50;
$borderRadius = 5;
$imgPath = "FULL_IMAGE_PARH";

$this->pdf->StartTransform();
// Скругляем углы для изображения | Rounding the corners for the image
$this->pdf->RoundedRect($imgX, $imgY, $imgWidth, $imgHeght, $borderRadius, '1111', 'CNZ');
// Вставляем само изображение | Insert the image
$this->pdf->Image($imgPath, $imgX, $imgY, $imgWidth, $imgHeght);
// Выводим полукруглую рамку вокруг изображения | Draw a semicircular frame around the image
$this->pdf->RoundedRect($imgX, $imgY, $imgWidth, $imgHeght, $borderRadius, '1111', 'S', $imgBorderStyle);
$this->pdf->StopTransform();

Возврат к списку