2016-03-25 3 views
0

В настоящее время я пытаюсь создать водяные знаки и поместить их в PDF (FPDI) перед загрузкой файла. Пока он работает отлично, за исключением случаев, когда цвет фона не белый, потому что тогда вы можете увидеть цвет шрифта.
Итак, мой вопрос заключается в том, как сделать изображение с двумя прозрачными цветами в pdf или как сделать только прозрачный шрифт и использовать исходный фоновый цвет в качестве фона.
Thats мой код до сих пор:PHP: прозрачный PNG и вставка в 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'); 

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

ответ

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); 
Смежные вопросы