PHP FPDF与透明PNG非常慢

时间:2011-08-24 21:46:36

标签: php png fpdf

我正在使用FPDF,我在网上找到了一个名为TransFPDF的扩展,它允许将透明的PNG放入我用PHP动态生成的PDF中。然而,我遇到的问题是PDF需要很长时间才能生成(当我嵌入大约6个字符时,脚本需要大约30秒才能运行,其中每个字符都是透明的PNG。这次还包括文本和背景但是我检查了时间,那些只需要大约一两秒,并且不会减慢代码速度)。

我发现主要的慢点是以下功能:

// needs GD 2.x extension 
// pixel-wise operation, not very fast 
function ImagePngWithAlpha($file,$x,$y,$w=0,$h=0,$link='') 
{ 
$tmp_alpha = tempnam('.', 'mska'); 
$this->tmpFiles[] = $tmp_alpha; 
$tmp_plain = tempnam('.', 'mskp'); 
$this->tmpFiles[] = $tmp_plain; 

list($wpx, $hpx) = getimagesize($file); 
$img = imagecreatefrompng($file); 
$alpha_img = imagecreate( $wpx, $hpx ); 

// generate gray scale pallete 
for($c=0;$c<256;$c++) ImageColorAllocate($alpha_img, $c, $c, $c); 

// extract alpha channel 
$xpx=0; 
while ($xpx<$wpx){ 
    $ypx = 0; 
    while ($ypx<$hpx){ 
        $color_index = imagecolorat($img, $xpx, $ypx); 
        $alpha = 255-($color_index>>24)*255/127; // GD alpha component: 7 bit only, 0..127! 
        imagesetpixel($alpha_img, $xpx, $ypx, $alpha); 
    ++$ypx; 
    } 
    ++$xpx; 
} 

imagepng($alpha_img, $tmp_alpha); 
imagedestroy($alpha_img); 

// extract image without alpha channel 
$plain_img = imagecreatetruecolor ( $wpx, $hpx ); 
imagecopy ($plain_img, $img, 0, 0, 0, 0, $wpx, $hpx ); 
imagepng($plain_img, $tmp_plain); 
imagedestroy($plain_img); 

//first embed mask image (w, h, x, will be ignored) 
$maskImg = $this->Image($tmp_alpha, 0,0,0,0, 'PNG', '', true); 

//embed image, masked with previously embedded mask 
$this->Image($tmp_plain,$x,$y,$w,$h,'PNG',$link, false, $maskImg); 
} 

有没有人对我如何加快速度有任何想法?我似乎无法让它超过每个字符大约4秒,这真的加起来很快(一个字符可能大约是1000x2000像素,是的我知道这很多,但是对于可打印的PDF是必要的)

谢谢。

0 个答案:

没有答案