0

您好,我有此代码将 jpeg 文件合并为一个:

<?php
function mergeImages($images) {
        $imageData = array();
        $len = count($images);
        $wc = ceil(sqrt($len));
        $hc = floor(sqrt($len/2));
        $maxW = array();
        $maxH = array();
        for($i = 0; $i < $len; $i++) {
                $imageData[$i] = getimagesize($images[$i]);
                $found = false;
                for($j = 0; $j < $i; $j++) {
                        if ( $imageData[$maxW[$j]][0] < $imageData[$i][0] ) {
                                $farr = $j > 0 ? array_slice($maxW, $j-1, $i) : array();
                                $maxW = array_merge($farr, array($i), array_slice($maxW, $j));
                                $found = true;
                                break;
                        }
                }
                if ( !$found ) {
                        $maxW[$i] = $i;
                }
                $found = false;
                for($j = 0; $j < $i; $j++) {
                        if ( $imageData[$maxH[$j]][1] < $imageData[$i][1] ) {
                                $farr = $j > 0 ? array_slice($maxH, $j-1, $i) : array();
                                $maxH = array_merge($farr, array($i), array_slice($maxH, $j));
                                $found = true;
                                break;
                        }
                }
                if ( !$found ) {
                        $maxH[$i] = $i;
                }
        }

        $width = 0;
        for($i = 0; $i < $wc; $i++) {
                $width += $imageData[$maxW[$i]][0];
        }

        $height = 0;
        for($i = 0; $i < $hc; $i++) {
                $height += $imageData[$maxH[$i]][1];
        }

        $im = imagecreatetruecolor($width, $height);

        $wCnt = 0;
        $startWFrom = 0;
        $startHFrom = 0;
        for( $i = 0; $i < $len; $i++ ) {
                $tmp = imagecreatefromjpeg($images[$i]);
                imagecopyresampled($im, $tmp, $startWFrom, $startHFrom, 0, 0, $imageData[$i][0], $imageData[$i][1], $imageData[$i][0], $imageData[$i][1]);
                $wCnt++;
                if ( $wCnt == $wc ) {
                        $startWFrom = 0;
                        $startHFrom += $imageData[$maxH[0]][1];
                        $wCnt = 0;
                } else {
                        $startWFrom += $imageData[$i][0];
                }
        }


        return $im;
}

$im = mergeImages(array('2013101.jpg', '2013102.jpg'));

header('Content-type: image/jpg');

?>

我想组合从 2013101.jpg 到 2013110.jpg 的 10 张图像,而不是给出我想要创建数组范围的每个文件名。

请帮我

4

1 回答 1

1

你可以使用一个简单的for循环,我猜?

for ($i = 2013101; $i < 2013110; $i++) {
    $im = mergeImages(array("$i.jpg", ''. $i+1 .'.jpg')); 
}

这会将 101 与 102 组合,102 与 103 等组合。如果您需要将 101 与 102 以及 103 与 104 组合,没有 102 与 103,则需要在for声明中将 $i 与 2 相加

于 2013-09-10T10:21:23.067 回答