Как использовать два шрифта в одном тексте с php GD? - PullRequest
0 голосов
/ 22 января 2020

Я использую PHP GD для генерации некоторых цифровых сертификатов, в которых я уже отписал и сгенерировал некоторый текст.

Дело в том, что в той части, где полные имена людей go, следующий , только затем, я должен разместить идентификационный номер. Но в другом размере.

Вопрос в том, что я генерирую этот текст с помощью собственной функции для центрирования, но я не знаю, как из того же текста я бы изменил положение и сохранил выравнивание по центру

проверьте это:

function textSize($size, $angle, $font, $text) {
    $f = imagettfbbox($size, $angle, $font, $text);
    return array(
        'height' => $f[1] - $f[5],
        'width' => $f[4] - $f[0]
    );
}

function text(&$im, $size, $angle, $y, $color, $font, $text, $align) {
    // Image/text sizes
    $imageSize = array(
        'height' => imagesy($im),
        'width' => imagesx($im)
    );
    $textSize = textSize($size, $angle, $font, $text);
    // Starting $x position
    switch(strtoupper($align)) {
        case 'R':
            $x = $imageSize['width'] - $textSize['width'];
            break;
        case 'C':
      $x = ($imageSize['width'] - $textSize['width']) / 2;
            break;
        default:
            $x = 0; // L
    }
    // Render
    imagettftext($im, $size, $angle, $x, $y, $color, $font, $text);
    return $x;
}

function CreateImg($valuenames,$valuelastname,$valuedni,$total_hours,$last_day,$month,$year)
{    
     $image_path = 'images/7x2_certificado_en_blanco.jpg';
     $image_to = 'images/7x2_certificado_en_blanco_modificed.jpg';
     $font_path_arial = '/rsc/arial.ttf';
     $font_path_arial_bold = '/rsc/arial_bold.ttf';
     $im = imagecreatefromjpeg($image_path);
     $black = imagecolorallocate($im, 0, 0, 0);
    $textnames = $valuenames;
    $textlastnames = $valuelastnames;
    $textdni = $valuedni;
    $titular = $textnames.' '.$textlastnames;
    $bbox = imagettfbbox(72, 0, $font_path_arial, $titular);
    imagettftext($im, 48, 0, (text($im, 72, 0, 1035, $black, $font_path_arial_bold, $titular, 'c') + $bbox[4]+50), 1035, $black, $font_path_arial,' DNI:'.$valuedni);
      imagettftext($im, 36, 0, 1095, 1490, $black, $font_path_arial,$total_hours);
      imagettftext($im, 36, 0, 1965, 1490, $black, $font_path_arial,$last_day);
      imagettftext($im, 36, 0, 2200, 1490, $black, $font_path_arial,$month);
      imagettftext($im, 36, 0, 2495, 1490, $black, $font_path_arial,$year);
     imagejpeg($im,$image_to);
     if(imagejpeg($im,$image_to)){
          imagedestroy($im);
          return $image_to;
     } else {
          echo('error');
     }
}
?>

, и вот что я хочу сделать:

imagen

что Полные имена и идентификационные номера всегда центрированы, а идентификационные номера имеют другой размер. Как бы я это сделал?

...