PHP: прозрачный PNG и вставка в PDF

В настоящее время я пытаюсь сгенерировать водяные знаки и поместить их в PDF (FPDI) до загрузки файла. Пока он работает отлично, за исключением случаев, когда цвет фона не белый, потому что тогда вы можете увидеть цвет шрифта.
Поэтому мой вопрос заключается в том, как сделать изображение с двумя прозрачными цветами в PDF-файле или как сделать прозрачным только шрифт и использовать исходный цвет фона в качестве фона.
Вот мой код до сих пор:

$length = strlen($watermark);
$fw     = imagefontwidth($fontsize);
$width  = $fw*$length;
$height = imagefontheight($fontsize);

//Create watermark-image
$tmp_file_img = tempnam(TMP.'/pdfwatermarks', "pdfwatermark_img_");
$img = imagecreatetruecolor($width, $height);
//Background color
$bg = imagecolorallocate($img, 255, 255, 255);
imagefilledrectangle($img, 0, 0, $width, $height, $bg);
imagecolortransparent($img, $bg);
//Font color
$color = imagecolorallocate($img, 50, 50, 50);
//Write watermark-string
for($i=0; $i<$length; $i++){
$xpos = $i * $fw;
imagechar($img, $fontsize, $xpos, 0, $watermark, $color);
$watermark = substr($watermark, 1);
}
//Opacity
$blank = imagecreatetruecolor($width, $height);
$tbg = imagecolorallocate($blank, 255, 255, 255);
imagefilledrectangle($blank, 0, 0,$width ,$height , $tbg);
imagecolortransparent($blank, $tbg);
if ( ($opacity < 0) OR ($opacity >100) ) $opacity = 100;
imagecopymerge($blank, $img, 0, 0, 0, 0, $width, $height, $opacity);
imagepng($blank,$tmp_file_img);

//Create PDF
$pdf = new FPDI();
if (file_exists($tmp_file)){
$pagecount = $pdf->setSourceFile($tmp_file);
} else {
clear();
return FALSE;
}

//Put the watermark on all pages
for($i=1; $i <= $pagecount; $i++) {
$tpl = $pdf->importPage($i);
$pdf->addPage();
$pdf->useTemplate($tpl, 1, 1, 0, 0, TRUE);
$pdf->Image($tmp_file_img, 1, 1, 0, 0, 'png');
}

//Write PDF
$pdf->Output($tmp_file, 'F');

Есть ли способ сделать так, чтобы можно было либо получить цвет в позиции, чтобы я мог изменить цвет шрифта, либо использовать два прозрачных цвета?

0

Решение

Решено с помощью:

// determine image size
$font = 4;
$width = imagefontwidth($font) * strlen($text) + 2;
$height = imagefontheight($font) + 2;
// create transparent image
$png = imagecreatetruecolor($width, $height);
imageAlphaBlending($png, true);
imagesavealpha($png, true);
// background
$color1 = imagecolorallocatealpha($png,   0,   0,   0, 127);
imagefill($png, 0, 0, $color1);
// foreground - text
$color2 = imagecolorallocatealpha($png, 255, 255, 255, 126);
imagestring($png, $font, 1, 1, $text, $color2);
// save as png file
imagepng($png, $fname);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]