0

したがって、いくつかの画像 ( 36 または 48 ) の画像を別の画像 ( ここに画像の説明を入力) にマージする必要があります。

この解像度は 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 分かかります。正方形を画像で埋めてから単一ファイルの PDF を生成するには、30 秒未満で実行できるものが必要です。

これを改善する方法はありますか?または、これをより速く、より適切に行う他の方法はありますか?

4

1 に答える 1

1

「良い時期に」とは、迅速かつ効率的にという意味だと思います。

その場合の答えは、おそらく PHP の外で行うことです。データの大部分は GD 拡張機能を使用してカスタム データ構造に保持されますが、PHP コードにはまだ多くのオーバーヘッドがあります。CSS スプライトを生成する目的で画像をマージするためのツールはたくさんありますが、それらすべてが画像のレイアウトを制御できるわけではありません。GD と C を使用して独自のコードを作成できます。

しかし、なぜわざわざ?最終的に PDF として出力したい場合は、個々の画像を直接 PDF に書き込んでみませんか?

于 2013-02-21T10:55:46.427 に答える