safeLoad(); $templatesDirectory = __DIR__ . '/templates'; $validFiles = [ 'diplom-1.png' => [ 'positions' => [ 'top' => ['x' => 125, 'y' => 270, 'maxWidth' => 262], 'bottom' => ['x' => 150, 'y' => 350, 'maxWidth' => 216], 'bottomSecond' => ['x' => 150, 'y' => 400, 'maxWidth' => 216], ], ], ]; $template = $_GET['template'] ?? ''; $topText = $_GET['top'] ?? ''; $bottomText = $_GET['bottom'] ?? ''; $bottomSecondText = $_GET['bottomSecond'] ?? ''; if (!isset($validFiles[$template]) || !file_exists(sprintf('%s/%s', $templatesDirectory, $template))) { die('Invalid template'); } if (empty($topText) || empty($bottomText)) { die('Invalid text'); } /** * Get centered X coordinate * * @param int $originalX * @param int $maxWidth * @param Imagine\Image\BoxInterface $textBox * * @return int */ function getXCoord($originalX, $maxWidth, $textBox) { $result = $originalX + ($maxWidth - $textBox->getWidth()) / 2; if ($result < 1) { return 1; } return (int) $result; } $templateFile = sprintf('%s/%s', $templatesDirectory, $template); $positions = $validFiles[$template]['positions']; $imagine = new Imagine(); $palette = new RGB(); $colorBlack = $palette->color('#000000', 100); $transparent = $palette->color('#FFFFFF', 0); $image = $imagine->open($templateFile); $font = new Font($_ENV['FONT_LOCATION'], 12, $colorBlack); $transparentFont = new Font($_ENV['FONT_LOCATION'], 0, $transparent); $top = $positions['top']; $bottom = $positions['bottom']; $bottomSecond = $positions['bottomSecond']; $topBox = $font->box($topText); $topX = getXCoord($top['x'], $top['maxWidth'], $topBox); $topY = $top['y']; $bottomBox = $font->box($bottomText); $bottomX = getXCoord($bottom['x'], $bottom['maxWidth'], $bottomBox); $bottomY = $bottom['y']; $bottomSecondBox = $transparentFont->box('placeholder'); if (!empty($bottomSecondText)) { $bottomSecondBox = $font->box($bottomSecondText); } $bottomSecondX = getXCoord($bottomSecond['x'], $bottomSecond['maxWidth'], $bottomSecondBox); $bottomSecondY = $bottomSecond['y']; $topPosition = new Point($topX, $topY); $bottomPosition = new Point($bottomX, $bottomY); $bottomSecondPosition = new Point($bottomSecondX, $bottomSecondY); $image->draw()->text($topText, $font, $topPosition, 0, $top['maxWidth'] ?? null); $image->draw()->text($bottomText, $font, $bottomPosition, 0, $bottom['maxWidth'] ?? null); $image->draw()->text($bottomSecondText, $font, $bottomSecondPosition, 0, $bottomSecond['maxWidth'] ?? null); $image->show('png');