如何将多个图像合并为一个图像
how to merge multiple image in single image
我有多张分辨率为 1073X672 的名片图片。现在我想将所有图像合并到一个 sheet 5366X3378(5 行 5 列)中,以便它可以存储 25 张卡片。但是在 25 张牌之后,我想将休息卡保存在另一张 sheet 上,然后在接下来的 25 张休息卡上保存在另一张 sheet.
我编写了以下代码,但此代码仅生成单个 sheet,其中包含开始的 25 张图像。
Array ( [0] => E:\idcarddata/finalcard/1.jpg [1] =>
E:\idcarddata/finalcard/2.jpg [2] =>
E:\idcarddata/finalcard/3.jpg [3] =>
E:\idcarddata/finalcard/4.jpg [4] =>
E:\idcarddata/finalcard/5.jpg [5] =>
E:\idcarddata/finalcard/6.jpg [6] =>
E:\idcarddata/finalcard/7.jpg [7] =>
E:\idcarddata/finalcard/8.jpg [8] =>
E:\idcarddata/finalcard/9.jpg [9] =>
E:\idcarddata/finalcard/10.jpg [10] =>
E:\idcarddata/finalcard/11.jpg [11] =>
E:\idcarddata/finalcard/12.jpg [12] =>
E:\idcarddata/finalcard/13.jpg [13] =>
E:\idcarddata/finalcard/14.jpg [14] =>
E:\idcarddata/finalcard/15.jpg [15] =>
E:\idcarddata/finalcard/16.jpg [16] =>
E:\idcarddata/finalcard/17.jpg [17] =>
E:\idcarddata/finalcard/18.jpg [18] =>
E:\idcarddata/finalcard/19.jpg [19] =>
E:\idcarddata/finalcard/20.jpg [20] =>
E:\idcarddata/finalcard/21.jpg [21] =>
E:\idcarddata/finalcard/22.jpg [22] =>
E:\idcarddata/finalcard/23.jpg [23] =>
E:\idcarddata/finalcard/24.jpg [24] =>
E:\idcarddata/finalcard/25.jpg [25] =>
E:\idcarddata/finalcard/26.jpg [26] =>
E:\idcarddata/finalcard/27.jpg [27] =>
E:\idcarddata/finalcard/28.jpg [28] =>
E:\idcarddata/finalcard/29.jpg [29] =>
E:\idcarddata/finalcard/30.jpg )
$mapImage = imagecreatetruecolor(5366, 3378);
$bgColor = imagecolorallocate($mapImage, 255, 255, 255);
imagefill($mapImage, 0, 0, $bgColor);
$temp=1;
foreach ($srcImagePaths as $index => $srcImagePath)
{
$x = ($index % 5) * (1073 + 1) + 1;
$y = floor($index / 5) * (672 + 1) + 1;
$tileImg = imagecreatefromjpeg($srcImagePath);
imagecopy($mapImage, $tileImg, $x, $y, 0, 0, 1073, 672);
imagedestroy($tileImg);
if($temp%20==0)
{
$thumbImage = imagecreatetruecolor(5366, 3378);
imagecopyresampled($thumbImage, $mapImage, 0, 0, 0, 0, 5366, 3378, 5366, 3378);
header('Content-type: image/png');
imagejpeg($thumbImage,dirname($_REQUEST['csvsheet'])."/finalcard/sheet".$temp.".jpg");
}
$temp=$temp+1;
输出
使用计数变量 $i
,您可以在点击第 25 张图像后重置该变量。
另外,您忘记在绘制下一个 sheet.
之前清除 mapImage
$mapImage = imagecreatetruecolor(5366, 3378);
$bgColor = imagecolorallocate($mapImage, 255, 255, 255);
imagefill($mapImage, 0, 0, $bgColor);
$temp=1;
$i = 0;
foreach ($srcImagePaths as $index => $srcImagePath)
{
$x = ($i % 5) * (1073 + 1) + 1;
$y = floor($i / 5) * (672 + 1) + 1;
$tileImg = imagecreatefromjpeg($srcImagePath);
imagecopy($mapImage, $tileImg, $x, $y, 0, 0, 1073, 672);
imagedestroy($tileImg);
$i++;
if($i>=25 || $index==count($srcImagePaths)-1)
{
imagejpeg($mapImage,dirname($_REQUEST['csvsheet'])."/finalcard/sheet".$temp.".jpg");
$temp++;
$i = 0;
imagefilledrectangle($mapImage, 0, 0, 5366, 3378, $bgColor);
}
}
我有多张分辨率为 1073X672 的名片图片。现在我想将所有图像合并到一个 sheet 5366X3378(5 行 5 列)中,以便它可以存储 25 张卡片。但是在 25 张牌之后,我想将休息卡保存在另一张 sheet 上,然后在接下来的 25 张休息卡上保存在另一张 sheet.
我编写了以下代码,但此代码仅生成单个 sheet,其中包含开始的 25 张图像。
Array ( [0] => E:\idcarddata/finalcard/1.jpg [1] =>
E:\idcarddata/finalcard/2.jpg [2] =>
E:\idcarddata/finalcard/3.jpg [3] =>
E:\idcarddata/finalcard/4.jpg [4] =>
E:\idcarddata/finalcard/5.jpg [5] =>
E:\idcarddata/finalcard/6.jpg [6] =>
E:\idcarddata/finalcard/7.jpg [7] =>
E:\idcarddata/finalcard/8.jpg [8] =>
E:\idcarddata/finalcard/9.jpg [9] =>
E:\idcarddata/finalcard/10.jpg [10] =>
E:\idcarddata/finalcard/11.jpg [11] =>
E:\idcarddata/finalcard/12.jpg [12] =>
E:\idcarddata/finalcard/13.jpg [13] =>
E:\idcarddata/finalcard/14.jpg [14] =>
E:\idcarddata/finalcard/15.jpg [15] =>
E:\idcarddata/finalcard/16.jpg [16] =>
E:\idcarddata/finalcard/17.jpg [17] =>
E:\idcarddata/finalcard/18.jpg [18] =>
E:\idcarddata/finalcard/19.jpg [19] =>
E:\idcarddata/finalcard/20.jpg [20] =>
E:\idcarddata/finalcard/21.jpg [21] =>
E:\idcarddata/finalcard/22.jpg [22] =>
E:\idcarddata/finalcard/23.jpg [23] =>
E:\idcarddata/finalcard/24.jpg [24] =>
E:\idcarddata/finalcard/25.jpg [25] =>
E:\idcarddata/finalcard/26.jpg [26] =>
E:\idcarddata/finalcard/27.jpg [27] =>
E:\idcarddata/finalcard/28.jpg [28] =>
E:\idcarddata/finalcard/29.jpg [29] =>
E:\idcarddata/finalcard/30.jpg )
$mapImage = imagecreatetruecolor(5366, 3378);
$bgColor = imagecolorallocate($mapImage, 255, 255, 255);
imagefill($mapImage, 0, 0, $bgColor);
$temp=1;
foreach ($srcImagePaths as $index => $srcImagePath)
{
$x = ($index % 5) * (1073 + 1) + 1;
$y = floor($index / 5) * (672 + 1) + 1;
$tileImg = imagecreatefromjpeg($srcImagePath);
imagecopy($mapImage, $tileImg, $x, $y, 0, 0, 1073, 672);
imagedestroy($tileImg);
if($temp%20==0)
{
$thumbImage = imagecreatetruecolor(5366, 3378);
imagecopyresampled($thumbImage, $mapImage, 0, 0, 0, 0, 5366, 3378, 5366, 3378);
header('Content-type: image/png');
imagejpeg($thumbImage,dirname($_REQUEST['csvsheet'])."/finalcard/sheet".$temp.".jpg");
}
$temp=$temp+1;
输出
使用计数变量 $i
,您可以在点击第 25 张图像后重置该变量。
另外,您忘记在绘制下一个 sheet.
$mapImage = imagecreatetruecolor(5366, 3378);
$bgColor = imagecolorallocate($mapImage, 255, 255, 255);
imagefill($mapImage, 0, 0, $bgColor);
$temp=1;
$i = 0;
foreach ($srcImagePaths as $index => $srcImagePath)
{
$x = ($i % 5) * (1073 + 1) + 1;
$y = floor($i / 5) * (672 + 1) + 1;
$tileImg = imagecreatefromjpeg($srcImagePath);
imagecopy($mapImage, $tileImg, $x, $y, 0, 0, 1073, 672);
imagedestroy($tileImg);
$i++;
if($i>=25 || $index==count($srcImagePaths)-1)
{
imagejpeg($mapImage,dirname($_REQUEST['csvsheet'])."/finalcard/sheet".$temp.".jpg");
$temp++;
$i = 0;
imagefilledrectangle($mapImage, 0, 0, 5366, 3378, $bgColor);
}
}