Создайте изображение с помощью GD, содержащего другие изображения

Я хотел бы создать картинку на PHP с помощью GD, состоящей из разных других изображений. Например, у меня есть 6 фотографий (или больше), и я хотел бы создать ОДНУ изображение, которое содержит эти разные изображения.

Сложность заключается в том, что моя последняя фотография должна иметь фиксированную ширину и высоту (304×179), поэтому, если разные изображения слишком велики, их нужно обрезать. Это пример IconFinder:

Эта фотография имеет 6 изображений http://img.ruphp.com/image/is_twitter.png

Эта картина состоит из 6 изображений, но третья птица (зеленая) разрезается, а 4, 5 и 6 разрезаются на дно. Это то, что я хочу, можете ли вы мне помочь написать этот код на PHP?

благодаря

Создайте свой основной образ и рассмотрите его как «холст».

Оттуда, используйте imagecopy (), чтобы скопировать меньшие изображения в изображение холста.

См. Например:

<?php header('Content-Type: image/jpg'); $canvas = imagecreatetruecolor(304, 179); $icon1 = imagecreatefromjpeg('icon.jpg'); $icon2 = imagecreatefromjpeg('icon2.jpg'); // ... add more source images as needed imagecopy($canvas, $icon1, 275, 102, 0, 0, 100, 100); imagecopy($canvas, $icon2, 0, 120, 0, 0, 100, 100); // ... copy additional source images to the canvas as needed imagejpeg($canvas); ?> 

В моем примере icon.jpg – это изображение 100х100, которое я icon.jpg в холст так, что его верхний левый угол находится на 275, 102 в холсте, который отсекает правую сторону.

редактировать

Я скорректировал код, чтобы быть более похожим на то, что вы делаете.

Здесь ни один проверенный винт-модификатор из одного из моих сценариев, надеюсь, что он может быть полезен:

  header('Content-type: image/png'); $image = array() //Populate this array with the image paths //Create the Letters Image Objects foreach($image as $a){ $image['obj'][] = imageCreateFromPNG($a); }unset($a); $canvasW = 300; $canvasH = 300; //Create Canvas $photoImage = imagecreatetruecolor($canvasW,$canvasH); imagesavealpha($photoImage, true); $trans_color = imagecolorallocatealpha($photoImage, 0, 0, 0, 127); imagefill($photoImage, 0, 0, $trans_color); //Merge Images $Offset_y = 0; $images_by_row = 3; $images_rows_height = 100; // height of each image row $counter = 0; foreach($image['obj'] as $a){ $counter++; $width = ceil(imagesx($a)); $height = ceil(imagesy($a)); if(!isset($offset)){ $offset = 1; } imageComposeAlpha($photoImage, $a, $offset, $Offset_y,$width,$height); if($offset >= 1){ $offset = $offset + $width; } //Check if new row next time if($counter >= $images_by_row){ if($images_by_row%$counter){ $offset_y += $images_rows_height; } } }unset($a); imagepng($photoImage); с  header('Content-type: image/png'); $image = array() //Populate this array with the image paths //Create the Letters Image Objects foreach($image as $a){ $image['obj'][] = imageCreateFromPNG($a); }unset($a); $canvasW = 300; $canvasH = 300; //Create Canvas $photoImage = imagecreatetruecolor($canvasW,$canvasH); imagesavealpha($photoImage, true); $trans_color = imagecolorallocatealpha($photoImage, 0, 0, 0, 127); imagefill($photoImage, 0, 0, $trans_color); //Merge Images $Offset_y = 0; $images_by_row = 3; $images_rows_height = 100; // height of each image row $counter = 0; foreach($image['obj'] as $a){ $counter++; $width = ceil(imagesx($a)); $height = ceil(imagesy($a)); if(!isset($offset)){ $offset = 1; } imageComposeAlpha($photoImage, $a, $offset, $Offset_y,$width,$height); if($offset >= 1){ $offset = $offset + $width; } //Check if new row next time if($counter >= $images_by_row){ if($images_by_row%$counter){ $offset_y += $images_rows_height; } } }unset($a); imagepng($photoImage); с  header('Content-type: image/png'); $image = array() //Populate this array with the image paths //Create the Letters Image Objects foreach($image as $a){ $image['obj'][] = imageCreateFromPNG($a); }unset($a); $canvasW = 300; $canvasH = 300; //Create Canvas $photoImage = imagecreatetruecolor($canvasW,$canvasH); imagesavealpha($photoImage, true); $trans_color = imagecolorallocatealpha($photoImage, 0, 0, 0, 127); imagefill($photoImage, 0, 0, $trans_color); //Merge Images $Offset_y = 0; $images_by_row = 3; $images_rows_height = 100; // height of each image row $counter = 0; foreach($image['obj'] as $a){ $counter++; $width = ceil(imagesx($a)); $height = ceil(imagesy($a)); if(!isset($offset)){ $offset = 1; } imageComposeAlpha($photoImage, $a, $offset, $Offset_y,$width,$height); if($offset >= 1){ $offset = $offset + $width; } //Check if new row next time if($counter >= $images_by_row){ if($images_by_row%$counter){ $offset_y += $images_rows_height; } } }unset($a); imagepng($photoImage);