Я не собираюсь писать весь ваш код для вас, но я предоставлю вам одну из моих функций, которая создала изображение следующим образом:
<img1> <img2>
<img3> <img4>
<img5> <img6>
Из шести изображений.Мой сценарий предполагает, что размер каждого изображения 240x20
, вам придется делать это по-своему.
// Sizes of one image
$width = 240;
$height = 20;
// The whole image
$fullW = $width*2;
$fullH = $height*3;
// Allocate image with exact size for 6 images
$img = imagecreate( $fullW, $fullH) or die("Cannot Initialize new GD image stream\n");;
// I was creating images based on their name, so here're name parts
$parts = array( 'real', 'imaginary');
$keys = array( 'normalized', 'code', 'code2');
// Two loops iterating trough all images, you'll be doing it one probably
foreach( $parts as $i => $part){
foreach( $keys as $j => $key){
// Generate name
$file = $prefix . '_' . $part . '_' . $key . '.png';
// I didn't need any special handling for errors, add your own, destroy image
// if anything goes wrong and so on
$sub = imagecreatefrompng( $file) or die( "Cannot open png file `$file`\n");
// After looking this function up in manual everything should be clear
imagecopy ( $img, $sub, $i*$width, $j*$height, 0, 0, $width, $height) or die( "Cannot copy data from `$file`\n");
// Unload current image
imagedestroy( $sub);
}
}
// Save image
imagepng( $img, $prefix . '.png');
echo "Saving: $prefix.png\n";
imagedestroy( $img);
Редактировать: изображения недостаточно велики
Если ваши изображения ($sub
) недостаточно велики (например, 40x40
px), вы должны проверить их размер и использовать imagecopyresampled()
:
if( (imagesx( $sub) < $width) || (imagesy( $sub) < $height)){
imagecopyresampled( $img, $sub, $width1, 0, 0, 0, $width, $height, imagesx( $sub), imagesy( $sub));
} else {
imagecopy ( $img, $sub, $width1 , 0, 0, 0, $width, $height);
}
или обновить его по своему усмотрению и необходимости.