0

始めたばかりなので初投稿になります!

以下にこの関数があります。これは、4 つの画像を 1 つにマージすることです。動作しますが、約 20 秒かかります。これをスピードアップする方法はありますか?すべての助けに感謝します!

<?php

$images = $_GET['i']; 
$nb = $_GET['nb']; 

if ($nb == '4') { 
   $dest = imagecreatefrompng('files/template_collage_' . $nb . '.png'); 
    $image_files = explode('|', $images); 
    $i = 1; 

    foreach ($image_files as $image_file) { 

        $image_source = imagecreatefromjpeg($image_file); 
        $size = getimagesize($image_file); 
        $image_new = imagecreatetruecolor(612,612); 
        imagecopyresampled($image_new,$image_source,0,0,0,0,612,612,$size[0],$size[1]); 

        if ($i == 1) { 
            imagecopymerge($dest, $image_new, 0, 0, 0, 0, 612, 612, 100); 

        } else if ($i == 2) { 
            imagecopymerge($dest, $image_new, 612, 0, 0, 0, 612, 612, 100); 

        } else if ($i == 3) { 
            imagecopymerge($dest, $image_new, 0, 612, 0, 0, 612, 612, 100); 

        } else if ($i == 4) { 
            imagecopymerge($dest, $image_new, 612, 612, 0, 0, 612, 612, 100); 

        } 

        $i++; 

        imagedestroy($image_source); 
        imagedestroy($image_new); 
        $size = ''; 
    } 


    // Output and free from memory 
    header('Content-Type: image/png'); 
    header('Content-Disposition: inline; filename=collage_card.png'); 
    imagejpeg($dest, null, 100); 

    imagedestroy($dest); 


}  

?>

以下の更新:

imagecopyresampled に変更し、$image_new を取り除きました。それでも改善せず、ループごとに約 4.5 秒です。

<?php

if ($nb == '4') {

$dest = imagecreatefrompng('files/template_collage_' . $nb . '.png');
$image_files = explode('|', $images);
$i = 1;

foreach ($image_files as $image_file) {

    $image_source = imagecreatefromjpeg($image_file);
    $size = getimagesize($image_file);

    if ($i == 1) {
        imagecopyresampled($dest, $image_source, 0, 0, 0, 0, 612, 612, $size[0],$size[1]);

    } else if ($i == 2) {
        imagecopyresampled($dest, $image_source, 612, 0, 0, 0, 612, 612, $size[0],$size[1]);

    } else if ($i == 3) {
        imagecopyresampled($dest, $image_source, 0, 612, 0, 0, 612, 612, $size[0],$size[1]);

    } else if ($i == 4) {
        imagecopyresampled($dest, $image_source, 612, 612, 0, 0, 612, 612, $size[0],$size[1]);

    }

    $i++;

    imagedestroy($image_source);
    $size = '';
}


// Output and free from memory
header('Content-Type: image/jpeg');
header('Content-Disposition: inline; filename=collage_card.jpg');
imagejpeg($dest, null, 100);

imagedestroy($dest);


}

?>
4

1 に答える 1

0

中間の必要はありません$image_new:

if ($i == 2) {
  imagecopyresampled($dest, $image_source,
    612, 0,           // target position
    0, 0,             // source position
    612, 612,         // target size
    $size[0],$size[1] // source size
  );
}

また、複雑な操作に時間がかかりすぎる場合、最初のステップは、複雑な操作のどの部分が実際にその原因になっているのかを測定することです。適切に配置されたいくつかの呼び出しは、microtime()それを支援します。

于 2013-11-10T13:21:48.453 に答える