在很短的时间内用PHP GD(imagecopymerge)合并大量图像

时间:2013-02-21 10:41:19

标签: php image

所以,我需要将一些图像(36或48)图像合并到另一个图像(enter image description here);

分辨率为4800x4800像素。所以每个方格都有695x695;我目前想出了这个解决方案:

$i = 1;
        $x = 140; $y = 140;
        foreach($files as $file):
            if($i > 1) $template = 'test.png'; 
            else $template = 'templates/24x24-TEMPLATE.png';
            $this->save_image($file,'templates/temp.jpg');
            $src = imagecreatefromjpeg('templates/temp.jpg');
            $src2 = imagecreatetruecolor(695,695);
            imagecopyresampled($src2, $src, 0, 0, 0, 0, 695, 695, 612, 612);
            imagejpeg($src2,'templates/temp.jpg');
            imagedestroy($src2);
            $src = imagecreatefromjpeg('templates/temp.jpg');
            $dest = imagecreatefrompng($template);
            imagealphablending($dest, false);
            imagesavealpha($dest, true);
            imagealphablending($src, false);
            imagesavealpha($src, true);
            imagecopymerge($dest, $src, $x, $y, 0, 0, 695, 695, 100); //have to play with these numbers for it to work for you, etc.
            imagepng($dest,'test.png');
            /* Destroy the images to free up space */
            imagedestroy($dest);
            imagedestroy($src);
            $x = $x + 695 + 65;
            if($i % 6 == 0):
                $y = $y + 695 + 65;
                $x = 140;
            endif;
            $i++;
        endforeach;

女巫下载要放在正方形上的文件,将其与正方形合并,然后为所有图像执行此操作,直到填满所有正方形。但该代码,20张图片需要5分钟!我需要能够在30秒内运行的东西用图像填充方块,然后生成单个文件PDF。

无论如何要改进这个吗?或者还有其他方法可以更快更好地完成这项工作吗?

1 个答案:

答案 0 :(得分:1)

我认为“在适当的时候”你的意思是快速有效。

然后答案可能是在PHP之外做的。尽管数据主要使用GD扩展保存在自定义数据结构中,但PHP代码仍然存在大量开销。有lots of tools for merging images用于生成CSS精灵 - 但是它们并不都能控制图像的布局。你可以用GD和C编写自己的。

但为什么要这么麻烦?如果您希望输出为PDF,为什么不直接将各个图像写入PDF?