2017-08-30 3 views
0

Ich habe mehrere Bilder von Visitenkarte mit 1073X672 Auflösung. Jetzt möchte ich alle Bilder in einem Blatt 5366X3378 (5 Reihe 5 Spalte) zusammenführen, so dass es 25 Karten speichern kann. Aber nach 25 Karten möchte ich die Restkarte auf einem anderen Blatt speichern und dann nach den nächsten 25 auf einem anderen Blatt ruhen.wie mehrere Bilder in einem Bild zusammenführen

Ich schrieb folgenden Code, aber dieser Code erzeugt nur ein Blatt, das 25 Bilder enthält.

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; 

OUTPUT enter image description here

Antwort

1

Verwenden Sie eine Zählvariable $i, die Sie zurücksetzen können, wenn Sie das 25. Bild treffen. Sie haben auch vergessen, mapImage zu löschen, bevor Sie das nächste Blatt zeichnen.

$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); 
} 
} 
+0

danke seine arbeit :) – prameshwer