0

PHP関数imagecopyresampleとimagecopyを使用して、2つの画像を回転およびマージしています。どちらの画像も約2480pxx3508pxで、3MBから10MBの間で変化する可能性があります。現時点では、2つをマージするのに約30秒かかります。以下は、私のコードです。

これを行うためのより良い方法があるかどうか疑問に思っていましたか?画面に画像を表示する必要はなく、ユーザーがサイトをナビゲートしているときに実際にバックグラウンドで実行できます。

前もって感謝します

 $photoFrame    = imagecreatetruecolor(3508,2480);

        $trans_colour   = imagecolorallocate($photoFrame, 255, 255, 255);
        imagefill($photoFrame, 0, 0, $trans_colour);

        for($i = 0; $i < $count_images; ++$i){
            $insert         = $res['images'][$i]['src'];
            $extension      = substr(strrchr($insert,'.'),1);
            $photoFrame2Rotation = (180-$res['images'][$i]['rotation']) + 180;

            $photo2         = imagecreatefrompng($insert);}
            $foto2W         = imagesx($photo2);
            $foto2H         = imagesy($photo2);
            $photoFrame2W   = $res['images'][$i]['width'];
            $photoFrame2H   = $res['images'][$i]['height'];

            $photoFrame2TOP = $res['images'][$i]['top'];
            $photoFrame2LEFT= $res['images'][$i]['left'];

            $photoFrame2    = imagecreatetruecolor($photoFrame2W,$photoFrame2H);
            $trans_colour   = imagecolorallocatealpha($photoFrame2, 0, 0, 0, 127);
            imagefill($photoFrame2, 0, 0, $trans_colour);

            imagecopyresampled($photoFrame2, $photo2, 0, 0, 0, 0, $photoFrame2W, $photoFrame2H, $foto2W, $foto2H);

            imagesavealpha($photoFrame2, true);

            $blue = imagecolorallocate($photoFrame2, 0, 0,255);
            imagecolortransparent($photoFrame2, $blue);

            imagecopy($photoFrame, $photoFrame2,$photoFrame2LEFT, $photoFrame2TOP, 0, 0, imagesx($photoFrame2), imagesy($photoFrame2));
        }

    $cachefile = "userdir/".$value.".png"; 

    imagepng($photoFrame, $cachefile, 1);
    imagedestroy($photoFrame);
4

0 に答える 0